native-document 1.0.35 → 1.0.37
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 +78 -47
- 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,69 @@ 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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
const $hydrateFn = function(hydrateFunction, target, element, property) {
|
|
41
|
+
if(!cloneBindingsDataCache.has(element)) {
|
|
42
|
+
// { classes, styles, attributes, value, attach }
|
|
43
|
+
cloneBindingsDataCache.set(element, {});
|
|
44
|
+
}
|
|
45
|
+
const hydrationState = cloneBindingsDataCache.get(element);
|
|
46
|
+
if(target === 'value') {
|
|
47
|
+
hydrationState.value = hydrateFunction;
|
|
48
|
+
return;
|
|
45
49
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
});
|
|
50
|
+
if(target === 'attach') {
|
|
51
|
+
hydrationState.attach = hydrateFunction;
|
|
52
|
+
return;
|
|
50
53
|
}
|
|
54
|
+
hydrationState[target] = hydrationState[target] || {};
|
|
55
|
+
hydrationState[target][property] = hydrateFunction;
|
|
51
56
|
}
|
|
52
57
|
|
|
58
|
+
const bindAttachMethods = function(node, bindDingData, data) {
|
|
59
|
+
if(!bindDingData.attach) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
bindDingData.attach(node, ...data);
|
|
63
|
+
};
|
|
64
|
+
|
|
53
65
|
export function TemplateCloner($fn) {
|
|
54
66
|
let $node = null;
|
|
67
|
+
let $hasBindingData = false;
|
|
55
68
|
|
|
56
69
|
const clone = (node, data) => {
|
|
57
70
|
const bindDingData = cloneBindingsDataCache.get(node);
|
|
58
|
-
if(node
|
|
59
|
-
if(bindDingData
|
|
71
|
+
if(node.nodeType === 3) {
|
|
72
|
+
if(bindDingData && bindDingData.value) {
|
|
60
73
|
return bindDingData.value(data);
|
|
61
74
|
}
|
|
62
75
|
return node.cloneNode(true);
|
|
63
76
|
}
|
|
64
|
-
const nodeCloned = node.cloneNode();
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
77
|
+
const nodeCloned = node.cloneNode(node.fullCloneNode);
|
|
78
|
+
if(bindDingData) {
|
|
79
|
+
bindAttributes(nodeCloned, bindDingData, data);
|
|
80
|
+
bindAttachMethods(nodeCloned, bindDingData, data);
|
|
81
|
+
}
|
|
82
|
+
if(node.fullCloneNode) {
|
|
83
|
+
return nodeCloned;
|
|
84
|
+
}
|
|
85
|
+
const childNodes = node.childNodes;
|
|
86
|
+
for(let i = 0, length = childNodes.length; i < length; i++) {
|
|
87
|
+
const childNode = childNodes[i];
|
|
70
88
|
const childNodeCloned = clone(childNode, data);
|
|
71
89
|
nodeCloned.appendChild(childNodeCloned);
|
|
72
90
|
}
|
|
@@ -76,27 +94,25 @@ export function TemplateCloner($fn) {
|
|
|
76
94
|
this.clone = (data) => {
|
|
77
95
|
if(!$node) {
|
|
78
96
|
$node = $fn(this);
|
|
97
|
+
if(!$hasBindingData) {
|
|
98
|
+
const nodeCloned = $node.cloneNode(true);
|
|
99
|
+
nodeCloned.fullCloneNode = true;
|
|
100
|
+
return nodeCloned;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if(!$hasBindingData) {
|
|
104
|
+
return $node.cloneNode(true);
|
|
79
105
|
}
|
|
80
|
-
|
|
81
|
-
PluginsManager.emit('NodeTemplateInstanceCreated', cloneNode);
|
|
82
|
-
return cloneNode;
|
|
106
|
+
return clone($node, data);
|
|
83
107
|
};
|
|
84
108
|
|
|
109
|
+
|
|
85
110
|
const createBinding = (hydrateFunction, target) => {
|
|
86
111
|
return {
|
|
87
|
-
$hydrate :
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
-
}
|
|
112
|
+
$hydrate : (element, property) => {
|
|
113
|
+
$hasBindingData = true;
|
|
114
|
+
$hydrateFn(hydrateFunction, target, element, property)
|
|
115
|
+
},
|
|
100
116
|
}
|
|
101
117
|
};
|
|
102
118
|
|
|
@@ -106,29 +122,44 @@ export function TemplateCloner($fn) {
|
|
|
106
122
|
this.class = (fn) => {
|
|
107
123
|
return createBinding(fn, 'classes');
|
|
108
124
|
};
|
|
109
|
-
this.
|
|
125
|
+
this.property = (propertyName) => {
|
|
126
|
+
return this.value(propertyName);
|
|
127
|
+
}
|
|
128
|
+
this.value = (callbackOrProperty) => {
|
|
129
|
+
if(typeof callbackOrProperty !== 'function') {
|
|
130
|
+
return createBinding(function(data) {
|
|
131
|
+
const firstArgument = data[0];
|
|
132
|
+
return createTextNode(firstArgument[callbackOrProperty]);
|
|
133
|
+
}, 'value');
|
|
134
|
+
}
|
|
110
135
|
return createBinding(function(data) {
|
|
111
|
-
return createTextNode(
|
|
136
|
+
return createTextNode(callbackOrProperty(...data));
|
|
112
137
|
}, 'value');
|
|
113
138
|
};
|
|
114
139
|
this.attr = (fn) => {
|
|
115
140
|
return createBinding(fn, 'attributes');
|
|
116
141
|
};
|
|
117
142
|
this.attach = (fn) => {
|
|
118
|
-
return createBinding(fn, '
|
|
143
|
+
return createBinding(fn, 'attach');
|
|
119
144
|
};
|
|
120
145
|
}
|
|
121
146
|
|
|
122
147
|
export function useCache(fn) {
|
|
123
148
|
let $cache = null;
|
|
124
|
-
PluginsManager.emit('NodeTemplateStored', fn);
|
|
125
149
|
|
|
126
|
-
|
|
150
|
+
const wrapper = function(args) {
|
|
127
151
|
if(!$cache) {
|
|
128
152
|
$cache = new TemplateCloner(fn);
|
|
129
|
-
PluginsManager.emit('NodeTemplateCreated', $cache);
|
|
130
153
|
}
|
|
131
|
-
|
|
132
154
|
return $cache.clone(args);
|
|
133
155
|
};
|
|
134
|
-
|
|
156
|
+
|
|
157
|
+
if(fn.length < 2) {
|
|
158
|
+
return function(...args) {
|
|
159
|
+
return wrapper(args);
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
return function(_, __, ...args) {
|
|
163
|
+
return wrapper([_, __, ...args]);
|
|
164
|
+
};
|
|
165
|
+
}
|
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
|
-
}
|