native-document 1.0.34 → 1.0.36
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/native-document.dev.js +457 -204
- package/dist/native-document.dev.js.map +1 -1
- package/dist/native-document.min.js +1 -1
- package/index.js +1 -0
- package/package.json +1 -1
- package/src/data/ObservableItem.js +29 -27
- package/src/data/observable-helpers/array.js +2 -2
- package/src/data/observable-helpers/computed.js +9 -1
- package/src/data/observable-helpers/object.js +35 -8
- package/src/elements/anchor.js +23 -13
- package/src/elements/control/for-each-array.js +19 -9
- package/src/elements/control/for-each.js +12 -5
- package/src/elements/control/show-if.js +6 -3
- package/src/elements/control/switch.js +3 -0
- package/src/utils/helpers.js +1 -1
- package/src/utils/plugins-manager.js +9 -9
- package/src/utils/validator.js +30 -15
- package/src/wrappers/AttributesWrapper.js +36 -26
- package/src/wrappers/ElementCreator.js +12 -7
- package/src/wrappers/HtmlElementWrapper.js +11 -7
- package/src/wrappers/NDElement.js +3 -31
- package/src/wrappers/NDElementEventPrototypes.js +116 -0
- package/src/wrappers/NdPrototype.js +52 -5
- package/src/wrappers/TemplateCloner.js +60 -39
- package/types/control-flow.d.ts +3 -2
- package/types/elements.d.ts +201 -1
- package/types/observable.d.ts +2 -1
- package/src/wrappers/HtmlElementEventsWrapper.js +0 -64
|
@@ -5,17 +5,16 @@ const cloneBindingsDataCache = new WeakMap();
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
const bindAttributes = (node, bindDingData, data) => {
|
|
8
|
-
|
|
9
|
-
return null;
|
|
10
|
-
}
|
|
11
|
-
const attributes = { };
|
|
8
|
+
let attributes = null;
|
|
12
9
|
if(bindDingData.attributes) {
|
|
10
|
+
attributes = attributes || {};
|
|
13
11
|
for (const attr in bindDingData.attributes) {
|
|
14
12
|
attributes[attr] = bindDingData.attributes[attr](...data);
|
|
15
13
|
}
|
|
16
14
|
}
|
|
17
15
|
|
|
18
16
|
if(bindDingData.classes) {
|
|
17
|
+
attributes = attributes || {};
|
|
19
18
|
attributes.class = {};
|
|
20
19
|
for (const className in bindDingData.classes) {
|
|
21
20
|
attributes.class[className] = bindDingData.classes[className](...data);
|
|
@@ -23,49 +22,48 @@ const bindAttributes = (node, bindDingData, data) => {
|
|
|
23
22
|
}
|
|
24
23
|
|
|
25
24
|
if(bindDingData.styles) {
|
|
25
|
+
attributes = attributes || {};
|
|
26
26
|
attributes.style = {};
|
|
27
27
|
for (const property in bindDingData.styles) {
|
|
28
28
|
attributes.style[property] = bindDingData.styles[property](...data);
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
if(
|
|
32
|
+
if(attributes) {
|
|
33
33
|
ElementCreator.processAttributes(node, attributes);
|
|
34
|
-
return
|
|
34
|
+
return true;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
return null;
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
const
|
|
42
|
-
if(!bindDingData
|
|
41
|
+
const bindAttachMethods = function(node, bindDingData, data) {
|
|
42
|
+
if(!bindDingData.attach) {
|
|
43
43
|
return null;
|
|
44
44
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
bindDingData.attaches[methodName].call(this, ...[...args, ...data]);
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
45
|
+
bindDingData.attach(node, ...data);
|
|
46
|
+
};
|
|
51
47
|
|
|
52
48
|
export function TemplateCloner($fn) {
|
|
53
49
|
let $node = null;
|
|
54
50
|
|
|
55
51
|
const clone = (node, data) => {
|
|
56
52
|
const bindDingData = cloneBindingsDataCache.get(node);
|
|
57
|
-
if(node
|
|
58
|
-
if(bindDingData
|
|
53
|
+
if(node.nodeType === 3) {
|
|
54
|
+
if(bindDingData && bindDingData.value) {
|
|
59
55
|
return bindDingData.value(data);
|
|
60
56
|
}
|
|
61
57
|
return node.cloneNode(true);
|
|
62
58
|
}
|
|
63
59
|
const nodeCloned = node.cloneNode();
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
60
|
+
if(bindDingData) {
|
|
61
|
+
bindAttributes(nodeCloned, bindDingData, data);
|
|
62
|
+
bindAttachMethods(nodeCloned, bindDingData, data);
|
|
63
|
+
}
|
|
64
|
+
const childNodes = node.childNodes;
|
|
65
|
+
for(let i = 0, length = childNodes.length; i < length; i++) {
|
|
66
|
+
const childNode = childNodes[i];
|
|
69
67
|
const childNodeCloned = clone(childNode, data);
|
|
70
68
|
nodeCloned.appendChild(childNodeCloned);
|
|
71
69
|
}
|
|
@@ -79,21 +77,27 @@ export function TemplateCloner($fn) {
|
|
|
79
77
|
return clone($node, data);
|
|
80
78
|
};
|
|
81
79
|
|
|
80
|
+
const $hydrateFn = function(hydrateFunction, target, element, property) {
|
|
81
|
+
if(!cloneBindingsDataCache.has(element)) {
|
|
82
|
+
// { classes, styles, attributes, value, attach }
|
|
83
|
+
cloneBindingsDataCache.set(element, {});
|
|
84
|
+
}
|
|
85
|
+
const hydrationState = cloneBindingsDataCache.get(element);
|
|
86
|
+
if(target === 'value') {
|
|
87
|
+
hydrationState.value = hydrateFunction;
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if(target === 'attach') {
|
|
91
|
+
hydrationState.attach = hydrateFunction;
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
hydrationState[target] = hydrationState[target] || {};
|
|
95
|
+
hydrationState[target][property] = hydrateFunction;
|
|
96
|
+
}
|
|
97
|
+
|
|
82
98
|
const createBinding = (hydrateFunction, target) => {
|
|
83
99
|
return {
|
|
84
|
-
$hydrate :
|
|
85
|
-
if(!cloneBindingsDataCache.has(element)) {
|
|
86
|
-
// { classes, styles, attributes, value, attaches }
|
|
87
|
-
cloneBindingsDataCache.set(element, {});
|
|
88
|
-
}
|
|
89
|
-
const hydrationState = cloneBindingsDataCache.get(element);
|
|
90
|
-
if(target === 'value') {
|
|
91
|
-
hydrationState.value = hydrateFunction;
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
hydrationState[target] = hydrationState[target] || {};
|
|
95
|
-
hydrationState[target][property] = hydrateFunction;
|
|
96
|
-
}
|
|
100
|
+
$hydrate : (element, property) => $hydrateFn(hydrateFunction, target, element, property),
|
|
97
101
|
}
|
|
98
102
|
};
|
|
99
103
|
|
|
@@ -103,27 +107,44 @@ export function TemplateCloner($fn) {
|
|
|
103
107
|
this.class = (fn) => {
|
|
104
108
|
return createBinding(fn, 'classes');
|
|
105
109
|
};
|
|
106
|
-
this.
|
|
110
|
+
this.property = (propertyName) => {
|
|
111
|
+
return this.value(propertyName);
|
|
112
|
+
}
|
|
113
|
+
this.value = (callbackOrProperty) => {
|
|
114
|
+
if(typeof callbackOrProperty !== 'function') {
|
|
115
|
+
return createBinding(function(data) {
|
|
116
|
+
const firstArgument = data[0];
|
|
117
|
+
return createTextNode(firstArgument[callbackOrProperty]);
|
|
118
|
+
}, 'value');
|
|
119
|
+
}
|
|
107
120
|
return createBinding(function(data) {
|
|
108
|
-
return createTextNode(
|
|
121
|
+
return createTextNode(callbackOrProperty(...data));
|
|
109
122
|
}, 'value');
|
|
110
123
|
};
|
|
111
124
|
this.attr = (fn) => {
|
|
112
125
|
return createBinding(fn, 'attributes');
|
|
113
126
|
};
|
|
114
127
|
this.attach = (fn) => {
|
|
115
|
-
return createBinding(fn, '
|
|
128
|
+
return createBinding(fn, 'attach');
|
|
116
129
|
};
|
|
117
130
|
}
|
|
118
131
|
|
|
119
132
|
export function useCache(fn) {
|
|
120
133
|
let $cache = null;
|
|
121
134
|
|
|
122
|
-
|
|
135
|
+
const wrapper = function(args) {
|
|
123
136
|
if(!$cache) {
|
|
124
137
|
$cache = new TemplateCloner(fn);
|
|
125
138
|
}
|
|
126
|
-
|
|
127
139
|
return $cache.clone(args);
|
|
128
140
|
};
|
|
141
|
+
|
|
142
|
+
if(fn.length < 2) {
|
|
143
|
+
return function(...args) {
|
|
144
|
+
return wrapper(args);
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
return function(_, __, ...args) {
|
|
148
|
+
return wrapper([_, __, ...args]);
|
|
149
|
+
};
|
|
129
150
|
}
|
package/types/control-flow.d.ts
CHANGED
|
@@ -30,14 +30,15 @@ export interface WhenFunction {
|
|
|
30
30
|
export interface ForEachFunction {
|
|
31
31
|
<T>(data: T[] | Record<string, T> | ObservableItem<T[]> | ObservableItem<Record<string, T>>,
|
|
32
32
|
callback: (item: T, index?: ObservableItem<number>) => ValidChild,
|
|
33
|
-
key?: string | ((item: T, defaultKey: string | number) => string)
|
|
33
|
+
key?: string | ((item: T, defaultKey: string | number) => string),
|
|
34
|
+
configs?: { shouldKeepItemsInCache: boolean, isParentUniqueChild: boolean }): DocumentFragment,
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
export interface ForEachArrayFunction {
|
|
37
38
|
<T>(data: ObservableArray<T>,
|
|
38
39
|
callback: (item: T, index?: ObservableItem<number>) => ValidChild,
|
|
39
40
|
key?: string | ((item: T, defaultKey: number) => string),
|
|
40
|
-
configs?: { pushDelay?: (items: T[]) => number }): DocumentFragment;
|
|
41
|
+
configs?: { pushDelay?: (items: T[]) => number, isParentUniqueChild: boolean }): DocumentFragment;
|
|
41
42
|
}
|
|
42
43
|
|
|
43
44
|
// Control Flow Components
|
package/types/elements.d.ts
CHANGED
|
@@ -412,6 +412,204 @@ export interface NDElement {
|
|
|
412
412
|
onPreventStopCopy(callback: (event: ClipboardEvent) => void): this;
|
|
413
413
|
onPreventStopCut(callback: (event: ClipboardEvent) => void): this;
|
|
414
414
|
onPreventStopPaste(callback: (event: ClipboardEvent) => void): this;
|
|
415
|
+
|
|
416
|
+
// DELEGATION METHODS - WHEN (for children)
|
|
417
|
+
|
|
418
|
+
// When versions for Mouse Events
|
|
419
|
+
whenClick(callback: (event: MouseEvent) => void): this;
|
|
420
|
+
whenDblClick(callback: (event: MouseEvent) => void): this;
|
|
421
|
+
whenMouseDown(callback: (event: MouseEvent) => void): this;
|
|
422
|
+
whenMouseEnter(callback: (event: MouseEvent) => void): this;
|
|
423
|
+
whenMouseLeave(callback: (event: MouseEvent) => void): this;
|
|
424
|
+
whenMouseMove(callback: (event: MouseEvent) => void): this;
|
|
425
|
+
whenMouseOut(callback: (event: MouseEvent) => void): this;
|
|
426
|
+
whenMouseOver(callback: (event: MouseEvent) => void): this;
|
|
427
|
+
whenMouseUp(callback: (event: MouseEvent) => void): this;
|
|
428
|
+
whenWheel(callback: (event: WheelEvent) => void): this;
|
|
429
|
+
whenContextMenu(callback: (event: MouseEvent) => void): this;
|
|
430
|
+
|
|
431
|
+
// When versions for Keyboard Events
|
|
432
|
+
whenKeyDown(callback: (event: KeyboardEvent) => void): this;
|
|
433
|
+
whenKeyPress(callback: (event: KeyboardEvent) => void): this;
|
|
434
|
+
whenKeyUp(callback: (event: KeyboardEvent) => void): this;
|
|
435
|
+
|
|
436
|
+
// When versions for Form Events
|
|
437
|
+
whenBlur(callback: (event: FocusEvent) => void): this;
|
|
438
|
+
whenChange(callback: (event: Event) => void): this;
|
|
439
|
+
whenFocus(callback: (event: FocusEvent) => void): this;
|
|
440
|
+
whenFocusIn(callback: (event: FocusEvent) => void): this;
|
|
441
|
+
whenFocusOut(callback: (event: FocusEvent) => void): this;
|
|
442
|
+
whenInput(callback: (event: Event) => void): this;
|
|
443
|
+
whenInvalid(callback: (event: Event) => void): this;
|
|
444
|
+
whenReset(callback: (event: Event) => void): this;
|
|
445
|
+
whenSearch(callback: (event: Event) => void): this;
|
|
446
|
+
whenSelect(callback: (event: Event) => void): this;
|
|
447
|
+
whenSubmit(callback: (event: Event) => void): this;
|
|
448
|
+
|
|
449
|
+
// When versions for Drag Events
|
|
450
|
+
whenDrag(callback: (event: DragEvent) => void): this;
|
|
451
|
+
whenDragEnd(callback: (event: DragEvent) => void): this;
|
|
452
|
+
whenDragEnter(callback: (event: DragEvent) => void): this;
|
|
453
|
+
whenDragLeave(callback: (event: DragEvent) => void): this;
|
|
454
|
+
whenDragOver(callback: (event: DragEvent) => void): this;
|
|
455
|
+
whenDragStart(callback: (event: DragEvent) => void): this;
|
|
456
|
+
whenDrop(callback: (event: DragEvent) => void): this;
|
|
457
|
+
|
|
458
|
+
// When versions for Window/Page Events
|
|
459
|
+
whenAfterPrint(callback: (event: Event) => void): this;
|
|
460
|
+
whenBeforePrint(callback: (event: Event) => void): this;
|
|
461
|
+
whenBeforeUnload(callback: (event: BeforeUnloadEvent) => void): this;
|
|
462
|
+
whenError(callback: (event: Event) => void): this;
|
|
463
|
+
whenHashChange(callback: (event: HashChangeEvent) => void): this;
|
|
464
|
+
whenLoad(callback: (event: Event) => void): this;
|
|
465
|
+
whenOffline(callback: (event: Event) => void): this;
|
|
466
|
+
whenOnline(callback: (event: Event) => void): this;
|
|
467
|
+
whenPageHide(callback: (event: PageTransitionEvent) => void): this;
|
|
468
|
+
whenPageShow(callback: (event: PageTransitionEvent) => void): this;
|
|
469
|
+
whenResize(callback: (event: UIEvent) => void): this;
|
|
470
|
+
whenScroll(callback: (event: Event) => void): this;
|
|
471
|
+
whenUnload(callback: (event: Event) => void): this;
|
|
472
|
+
|
|
473
|
+
// When versions for Media Events
|
|
474
|
+
whenAbort(callback: (event: Event) => void): this;
|
|
475
|
+
whenCanPlay(callback: (event: Event) => void): this;
|
|
476
|
+
whenCanPlayThrough(callback: (event: Event) => void): this;
|
|
477
|
+
whenDurationChange(callback: (event: Event) => void): this;
|
|
478
|
+
whenEmptied(callback: (event: Event) => void): this;
|
|
479
|
+
whenEnded(callback: (event: Event) => void): this;
|
|
480
|
+
whenLoadedData(callback: (event: Event) => void): this;
|
|
481
|
+
whenLoadedMetadata(callback: (event: Event) => void): this;
|
|
482
|
+
whenLoadStart(callback: (event: Event) => void): this;
|
|
483
|
+
whenPause(callback: (event: Event) => void): this;
|
|
484
|
+
whenPlay(callback: (event: Event) => void): this;
|
|
485
|
+
whenPlaying(callback: (event: Event) => void): this;
|
|
486
|
+
whenProgress(callback: (event: ProgressEvent) => void): this;
|
|
487
|
+
whenRateChange(callback: (event: Event) => void): this;
|
|
488
|
+
whenSeeked(callback: (event: Event) => void): this;
|
|
489
|
+
whenSeeking(callback: (event: Event) => void): this;
|
|
490
|
+
whenStalled(callback: (event: Event) => void): this;
|
|
491
|
+
whenSuspend(callback: (event: Event) => void): this;
|
|
492
|
+
whenTimeUpdate(callback: (event: Event) => void): this;
|
|
493
|
+
whenVolumeChange(callback: (event: Event) => void): this;
|
|
494
|
+
whenWaiting(callback: (event: Event) => void): this;
|
|
495
|
+
|
|
496
|
+
// When versions for Touch Events
|
|
497
|
+
whenTouchCancel(callback: (event: TouchEvent) => void): this;
|
|
498
|
+
whenTouchEnd(callback: (event: TouchEvent) => void): this;
|
|
499
|
+
whenTouchMove(callback: (event: TouchEvent) => void): this;
|
|
500
|
+
whenTouchStart(callback: (event: TouchEvent) => void): this;
|
|
501
|
+
|
|
502
|
+
// When versions for Animation Events
|
|
503
|
+
whenAnimationEnd(callback: (event: AnimationEvent) => void): this;
|
|
504
|
+
whenAnimationIteration(callback: (event: AnimationEvent) => void): this;
|
|
505
|
+
whenAnimationStart(callback: (event: AnimationEvent) => void): this;
|
|
506
|
+
|
|
507
|
+
// When versions for Transition Events
|
|
508
|
+
whenTransitionEnd(callback: (event: TransitionEvent) => void): this;
|
|
509
|
+
|
|
510
|
+
// When versions for Clipboard Events
|
|
511
|
+
whenCopy(callback: (event: ClipboardEvent) => void): this;
|
|
512
|
+
whenCut(callback: (event: ClipboardEvent) => void): this;
|
|
513
|
+
whenPaste(callback: (event: ClipboardEvent) => void): this;
|
|
514
|
+
|
|
515
|
+
// CAPTURE METHODS (for parents)
|
|
516
|
+
|
|
517
|
+
// Capture versions for Mouse Events
|
|
518
|
+
captureClick(directHandler?: (event: MouseEvent) => void): this;
|
|
519
|
+
captureDblClick(directHandler?: (event: MouseEvent) => void): this;
|
|
520
|
+
captureMouseDown(directHandler?: (event: MouseEvent) => void): this;
|
|
521
|
+
captureMouseEnter(directHandler?: (event: MouseEvent) => void): this;
|
|
522
|
+
captureMouseLeave(directHandler?: (event: MouseEvent) => void): this;
|
|
523
|
+
captureMouseMove(directHandler?: (event: MouseEvent) => void): this;
|
|
524
|
+
captureMouseOut(directHandler?: (event: MouseEvent) => void): this;
|
|
525
|
+
captureMouseOver(directHandler?: (event: MouseEvent) => void): this;
|
|
526
|
+
captureMouseUp(directHandler?: (event: MouseEvent) => void): this;
|
|
527
|
+
captureWheel(directHandler?: (event: WheelEvent) => void): this;
|
|
528
|
+
captureContextMenu(directHandler?: (event: MouseEvent) => void): this;
|
|
529
|
+
|
|
530
|
+
// Capture versions for Keyboard Events
|
|
531
|
+
captureKeyDown(directHandler?: (event: KeyboardEvent) => void): this;
|
|
532
|
+
captureKeyPress(directHandler?: (event: KeyboardEvent) => void): this;
|
|
533
|
+
captureKeyUp(directHandler?: (event: KeyboardEvent) => void): this;
|
|
534
|
+
|
|
535
|
+
// Capture versions for Form Events
|
|
536
|
+
captureBlur(directHandler?: (event: FocusEvent) => void): this;
|
|
537
|
+
captureChange(directHandler?: (event: Event) => void): this;
|
|
538
|
+
captureFocus(directHandler?: (event: FocusEvent) => void): this;
|
|
539
|
+
captureFocusIn(directHandler?: (event: FocusEvent) => void): this;
|
|
540
|
+
captureFocusOut(directHandler?: (event: FocusEvent) => void): this;
|
|
541
|
+
captureInput(directHandler?: (event: Event) => void): this;
|
|
542
|
+
captureInvalid(directHandler?: (event: Event) => void): this;
|
|
543
|
+
captureReset(directHandler?: (event: Event) => void): this;
|
|
544
|
+
captureSearch(directHandler?: (event: Event) => void): this;
|
|
545
|
+
captureSelect(directHandler?: (event: Event) => void): this;
|
|
546
|
+
captureSubmit(directHandler?: (event: Event) => void): this;
|
|
547
|
+
|
|
548
|
+
// Capture versions for Drag Events
|
|
549
|
+
captureDrag(directHandler?: (event: DragEvent) => void): this;
|
|
550
|
+
captureDragEnd(directHandler?: (event: DragEvent) => void): this;
|
|
551
|
+
captureDragEnter(directHandler?: (event: DragEvent) => void): this;
|
|
552
|
+
captureDragLeave(directHandler?: (event: DragEvent) => void): this;
|
|
553
|
+
captureDragOver(directHandler?: (event: DragEvent) => void): this;
|
|
554
|
+
captureDragStart(directHandler?: (event: DragEvent) => void): this;
|
|
555
|
+
captureDrop(directHandler?: (event: DragEvent) => void): this;
|
|
556
|
+
|
|
557
|
+
// Capture versions for Window/Page Events
|
|
558
|
+
captureAfterPrint(directHandler?: (event: Event) => void): this;
|
|
559
|
+
captureBeforePrint(directHandler?: (event: Event) => void): this;
|
|
560
|
+
captureBeforeUnload(directHandler?: (event: BeforeUnloadEvent) => void): this;
|
|
561
|
+
captureError(directHandler?: (event: Event) => void): this;
|
|
562
|
+
captureHashChange(directHandler?: (event: HashChangeEvent) => void): this;
|
|
563
|
+
captureLoad(directHandler?: (event: Event) => void): this;
|
|
564
|
+
captureOffline(directHandler?: (event: Event) => void): this;
|
|
565
|
+
captureOnline(directHandler?: (event: Event) => void): this;
|
|
566
|
+
capturePageHide(directHandler?: (event: PageTransitionEvent) => void): this;
|
|
567
|
+
capturePageShow(directHandler?: (event: PageTransitionEvent) => void): this;
|
|
568
|
+
captureResize(directHandler?: (event: UIEvent) => void): this;
|
|
569
|
+
captureScroll(directHandler?: (event: Event) => void): this;
|
|
570
|
+
captureUnload(directHandler?: (event: Event) => void): this;
|
|
571
|
+
|
|
572
|
+
// Capture versions for Media Events
|
|
573
|
+
captureAbort(directHandler?: (event: Event) => void): this;
|
|
574
|
+
captureCanPlay(directHandler?: (event: Event) => void): this;
|
|
575
|
+
captureCanPlayThrough(directHandler?: (event: Event) => void): this;
|
|
576
|
+
captureDurationChange(directHandler?: (event: Event) => void): this;
|
|
577
|
+
captureEmptied(directHandler?: (event: Event) => void): this;
|
|
578
|
+
captureEnded(directHandler?: (event: Event) => void): this;
|
|
579
|
+
captureLoadedData(directHandler?: (event: Event) => void): this;
|
|
580
|
+
captureLoadedMetadata(directHandler?: (event: Event) => void): this;
|
|
581
|
+
captureLoadStart(directHandler?: (event: Event) => void): this;
|
|
582
|
+
capturePause(directHandler?: (event: Event) => void): this;
|
|
583
|
+
capturePlay(directHandler?: (event: Event) => void): this;
|
|
584
|
+
capturePlaying(directHandler?: (event: Event) => void): this;
|
|
585
|
+
captureProgress(directHandler?: (event: ProgressEvent) => void): this;
|
|
586
|
+
captureRateChange(directHandler?: (event: Event) => void): this;
|
|
587
|
+
captureSeeked(directHandler?: (event: Event) => void): this;
|
|
588
|
+
captureSeeking(directHandler?: (event: Event) => void): this;
|
|
589
|
+
captureStalled(directHandler?: (event: Event) => void): this;
|
|
590
|
+
captureSuspend(directHandler?: (event: Event) => void): this;
|
|
591
|
+
captureTimeUpdate(directHandler?: (event: Event) => void): this;
|
|
592
|
+
captureVolumeChange(directHandler?: (event: Event) => void): this;
|
|
593
|
+
captureWaiting(directHandler?: (event: Event) => void): this;
|
|
594
|
+
|
|
595
|
+
// Capture versions for Touch Events
|
|
596
|
+
captureTouchCancel(directHandler?: (event: TouchEvent) => void): this;
|
|
597
|
+
captureTouchEnd(directHandler?: (event: TouchEvent) => void): this;
|
|
598
|
+
captureTouchMove(directHandler?: (event: TouchEvent) => void): this;
|
|
599
|
+
captureTouchStart(directHandler?: (event: TouchEvent) => void): this;
|
|
600
|
+
|
|
601
|
+
// Capture versions for Animation Events
|
|
602
|
+
captureAnimationEnd(directHandler?: (event: AnimationEvent) => void): this;
|
|
603
|
+
captureAnimationIteration(directHandler?: (event: AnimationEvent) => void): this;
|
|
604
|
+
captureAnimationStart(directHandler?: (event: AnimationEvent) => void): this;
|
|
605
|
+
|
|
606
|
+
// Capture versions for Transition Events
|
|
607
|
+
captureTransitionEnd(directHandler?: (event: TransitionEvent) => void): this;
|
|
608
|
+
|
|
609
|
+
// Capture versions for Clipboard Events
|
|
610
|
+
captureCopy(directHandler?: (event: ClipboardEvent) => void): this;
|
|
611
|
+
captureCut(directHandler?: (event: ClipboardEvent) => void): this;
|
|
612
|
+
capturePaste(directHandler?: (event: ClipboardEvent) => void): this;
|
|
415
613
|
}
|
|
416
614
|
|
|
417
615
|
export type ValidChild =
|
|
@@ -424,7 +622,9 @@ export type ValidChild =
|
|
|
424
622
|
| Text
|
|
425
623
|
| ObservableItem
|
|
426
624
|
| NDElement
|
|
427
|
-
|
|
|
625
|
+
| BindingHydrator
|
|
626
|
+
| ValidChild[]
|
|
627
|
+
| ((...args: any[]) => ValidChild);
|
|
428
628
|
|
|
429
629
|
export type Attributes = Record<string, any> & {
|
|
430
630
|
class?: string | Record<string, boolean | ObservableItem<boolean>>;
|
package/types/observable.d.ts
CHANGED
|
@@ -81,6 +81,7 @@ export interface BatchFunction<TArgs extends any[] = any[], TReturn = any> {
|
|
|
81
81
|
readonly $observer: ObservableItem<number>;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
+
export type ValidComputedDependencies = Array<ObservableItem | ObservableArray<any> | ObservableChecker | ObservableProxy<any>>;
|
|
84
85
|
export interface ObservableStatic {
|
|
85
86
|
<T>(value: T): ObservableItem<T>;
|
|
86
87
|
array<T>(target: T[]): ObservableArray<T>;
|
|
@@ -88,7 +89,7 @@ export interface ObservableStatic {
|
|
|
88
89
|
object<T extends Record<string, any>>(value: T): ObservableProxy<T>;
|
|
89
90
|
json<T extends Record<string, any>>(value: T): ObservableProxy<T>;
|
|
90
91
|
|
|
91
|
-
computed<T>(callback: () => T, dependencies?:
|
|
92
|
+
computed<T>(callback: () => T, dependencies?: ValidComputedDependencies): ObservableItem<T>;
|
|
92
93
|
computed<T>(callback: () => T, batchFunction?: BatchFunction): ObservableItem<T>;
|
|
93
94
|
|
|
94
95
|
batch(callback: Function): BatchFunction;
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
*
|
|
5
|
-
* @param {HTMLElement} element
|
|
6
|
-
* @returns {HTMLElement}
|
|
7
|
-
*/
|
|
8
|
-
function HtmlElementPreventEventsWrapper(element) {
|
|
9
|
-
const events = {};
|
|
10
|
-
return new Proxy(events, {
|
|
11
|
-
get(target, property) {
|
|
12
|
-
if(events[property]) {
|
|
13
|
-
return events[property];
|
|
14
|
-
}
|
|
15
|
-
events[property] = function(callback) {
|
|
16
|
-
element.addEventListener(property.toLowerCase(), function(event) {
|
|
17
|
-
event.preventDefault();
|
|
18
|
-
callback.apply(this, [event]);
|
|
19
|
-
});
|
|
20
|
-
return element
|
|
21
|
-
};
|
|
22
|
-
return events[property];
|
|
23
|
-
},
|
|
24
|
-
set(target, property, newValue, receiver) {
|
|
25
|
-
//...
|
|
26
|
-
this.get(target, property)(newValue);
|
|
27
|
-
return element;
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
*
|
|
34
|
-
* @param {HTMLElement} element
|
|
35
|
-
* @returns {HTMLElement}
|
|
36
|
-
*/
|
|
37
|
-
export default function HtmlElementEventsWrapper(element) {
|
|
38
|
-
const events = {};
|
|
39
|
-
return new Proxy(events, {
|
|
40
|
-
get(target, property) {
|
|
41
|
-
if(events[property]) {
|
|
42
|
-
return events[property];
|
|
43
|
-
}
|
|
44
|
-
if(property === 'prevent') {
|
|
45
|
-
events[property] = HtmlElementPreventEventsWrapper(element);
|
|
46
|
-
return events[property];
|
|
47
|
-
}
|
|
48
|
-
if(property === 'removeAll') {
|
|
49
|
-
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
events[property] = function(callback) {
|
|
53
|
-
element.addEventListener(property.toLowerCase(), callback);
|
|
54
|
-
return element
|
|
55
|
-
};
|
|
56
|
-
return events[property];
|
|
57
|
-
},
|
|
58
|
-
set(target, property, newValue, receiver) {
|
|
59
|
-
//...
|
|
60
|
-
this.get(target, property)(newValue);
|
|
61
|
-
return element;
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
}
|