native-document 1.0.35 → 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 +455 -211
- 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 +20 -15
- 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 +61 -45
- 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
|
@@ -1,22 +1,20 @@
|
|
|
1
1
|
import {ElementCreator} from "./ElementCreator";
|
|
2
2
|
import {createTextNode} from "./HtmlElementWrapper";
|
|
3
|
-
import PluginsManager from "../utils/plugins-manager";
|
|
4
3
|
|
|
5
4
|
const cloneBindingsDataCache = new WeakMap();
|
|
6
5
|
|
|
7
6
|
|
|
8
7
|
const bindAttributes = (node, bindDingData, data) => {
|
|
9
|
-
|
|
10
|
-
return null;
|
|
11
|
-
}
|
|
12
|
-
const attributes = { };
|
|
8
|
+
let attributes = null;
|
|
13
9
|
if(bindDingData.attributes) {
|
|
10
|
+
attributes = attributes || {};
|
|
14
11
|
for (const attr in bindDingData.attributes) {
|
|
15
12
|
attributes[attr] = bindDingData.attributes[attr](...data);
|
|
16
13
|
}
|
|
17
14
|
}
|
|
18
15
|
|
|
19
16
|
if(bindDingData.classes) {
|
|
17
|
+
attributes = attributes || {};
|
|
20
18
|
attributes.class = {};
|
|
21
19
|
for (const className in bindDingData.classes) {
|
|
22
20
|
attributes.class[className] = bindDingData.classes[className](...data);
|
|
@@ -24,49 +22,48 @@ const bindAttributes = (node, bindDingData, data) => {
|
|
|
24
22
|
}
|
|
25
23
|
|
|
26
24
|
if(bindDingData.styles) {
|
|
25
|
+
attributes = attributes || {};
|
|
27
26
|
attributes.style = {};
|
|
28
27
|
for (const property in bindDingData.styles) {
|
|
29
28
|
attributes.style[property] = bindDingData.styles[property](...data);
|
|
30
29
|
}
|
|
31
30
|
}
|
|
32
31
|
|
|
33
|
-
if(
|
|
32
|
+
if(attributes) {
|
|
34
33
|
ElementCreator.processAttributes(node, attributes);
|
|
35
|
-
return
|
|
34
|
+
return true;
|
|
36
35
|
}
|
|
37
36
|
|
|
38
37
|
return null;
|
|
39
38
|
};
|
|
40
39
|
|
|
41
40
|
|
|
42
|
-
const
|
|
43
|
-
if(!bindDingData
|
|
41
|
+
const bindAttachMethods = function(node, bindDingData, data) {
|
|
42
|
+
if(!bindDingData.attach) {
|
|
44
43
|
return null;
|
|
45
44
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
bindDingData.attaches[methodName].call(this, ...[...args, ...data]);
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
}
|
|
45
|
+
bindDingData.attach(node, ...data);
|
|
46
|
+
};
|
|
52
47
|
|
|
53
48
|
export function TemplateCloner($fn) {
|
|
54
49
|
let $node = null;
|
|
55
50
|
|
|
56
51
|
const clone = (node, data) => {
|
|
57
52
|
const bindDingData = cloneBindingsDataCache.get(node);
|
|
58
|
-
if(node
|
|
59
|
-
if(bindDingData
|
|
53
|
+
if(node.nodeType === 3) {
|
|
54
|
+
if(bindDingData && bindDingData.value) {
|
|
60
55
|
return bindDingData.value(data);
|
|
61
56
|
}
|
|
62
57
|
return node.cloneNode(true);
|
|
63
58
|
}
|
|
64
59
|
const nodeCloned = node.cloneNode();
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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];
|
|
70
67
|
const childNodeCloned = clone(childNode, data);
|
|
71
68
|
nodeCloned.appendChild(childNodeCloned);
|
|
72
69
|
}
|
|
@@ -77,26 +74,30 @@ export function TemplateCloner($fn) {
|
|
|
77
74
|
if(!$node) {
|
|
78
75
|
$node = $fn(this);
|
|
79
76
|
}
|
|
80
|
-
|
|
81
|
-
PluginsManager.emit('NodeTemplateInstanceCreated', cloneNode);
|
|
82
|
-
return cloneNode;
|
|
77
|
+
return clone($node, data);
|
|
83
78
|
};
|
|
84
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
|
+
|
|
85
98
|
const createBinding = (hydrateFunction, target) => {
|
|
86
99
|
return {
|
|
87
|
-
$hydrate :
|
|
88
|
-
if(!cloneBindingsDataCache.has(element)) {
|
|
89
|
-
// { classes, styles, attributes, value, attaches }
|
|
90
|
-
cloneBindingsDataCache.set(element, {});
|
|
91
|
-
}
|
|
92
|
-
const hydrationState = cloneBindingsDataCache.get(element);
|
|
93
|
-
if(target === 'value') {
|
|
94
|
-
hydrationState.value = hydrateFunction;
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
hydrationState[target] = hydrationState[target] || {};
|
|
98
|
-
hydrationState[target][property] = hydrateFunction;
|
|
99
|
-
}
|
|
100
|
+
$hydrate : (element, property) => $hydrateFn(hydrateFunction, target, element, property),
|
|
100
101
|
}
|
|
101
102
|
};
|
|
102
103
|
|
|
@@ -106,29 +107,44 @@ export function TemplateCloner($fn) {
|
|
|
106
107
|
this.class = (fn) => {
|
|
107
108
|
return createBinding(fn, 'classes');
|
|
108
109
|
};
|
|
109
|
-
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
|
+
}
|
|
110
120
|
return createBinding(function(data) {
|
|
111
|
-
return createTextNode(
|
|
121
|
+
return createTextNode(callbackOrProperty(...data));
|
|
112
122
|
}, 'value');
|
|
113
123
|
};
|
|
114
124
|
this.attr = (fn) => {
|
|
115
125
|
return createBinding(fn, 'attributes');
|
|
116
126
|
};
|
|
117
127
|
this.attach = (fn) => {
|
|
118
|
-
return createBinding(fn, '
|
|
128
|
+
return createBinding(fn, 'attach');
|
|
119
129
|
};
|
|
120
130
|
}
|
|
121
131
|
|
|
122
132
|
export function useCache(fn) {
|
|
123
133
|
let $cache = null;
|
|
124
|
-
PluginsManager.emit('NodeTemplateStored', fn);
|
|
125
134
|
|
|
126
|
-
|
|
135
|
+
const wrapper = function(args) {
|
|
127
136
|
if(!$cache) {
|
|
128
137
|
$cache = new TemplateCloner(fn);
|
|
129
|
-
PluginsManager.emit('NodeTemplateCreated', $cache);
|
|
130
138
|
}
|
|
131
|
-
|
|
132
139
|
return $cache.clone(args);
|
|
133
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
|
+
};
|
|
134
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
|
-
}
|