jpf 4.0.2 → 4.0.4
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/View.d.ts +5 -2
- package/dist/View.js +5 -0
- package/dist/View.js.map +1 -1
- package/dist/ViewModel.d.ts +6 -12
- package/dist/ViewModel.js +47 -64
- package/dist/ViewModel.js.map +1 -1
- package/dist/attributes.d.ts +8 -0
- package/dist/controls/JsonFormatter/Json.d.ts +27 -0
- package/dist/controls/JsonFormatter/Json.js +72 -0
- package/dist/controls/JsonFormatter/Json.js.map +1 -0
- package/dist/controls/codeMirror/HtmlEditor.d.ts +15 -0
- package/dist/controls/codeMirror/HtmlEditor.js +127 -0
- package/dist/controls/codeMirror/HtmlEditor.js.map +1 -0
- package/dist/controls/codeMirror/JsonEditor.d.ts +15 -0
- package/dist/controls/codeMirror/JsonEditor.js +111 -0
- package/dist/controls/codeMirror/JsonEditor.js.map +1 -0
- package/dist/controls/html/Button.d.ts +15 -0
- package/dist/controls/html/Button.js +48 -0
- package/dist/controls/html/Button.js.map +1 -0
- package/dist/controls/html/Div.d.ts +10 -0
- package/dist/controls/html/Div.js +17 -0
- package/dist/controls/html/Div.js.map +1 -0
- package/dist/controls/html/Image.d.ts +7 -0
- package/dist/controls/html/Image.js +16 -0
- package/dist/controls/html/Image.js.map +1 -0
- package/dist/controls/html/Input.d.ts +43 -0
- package/dist/controls/html/Input.js +179 -0
- package/dist/controls/html/Input.js.map +1 -0
- package/dist/controls/html/Select.d.ts +27 -0
- package/dist/controls/html/Select.js +116 -0
- package/dist/controls/html/Select.js.map +1 -0
- package/dist/controls/html/Span.d.ts +7 -0
- package/dist/controls/html/Span.js +16 -0
- package/dist/controls/html/Span.js.map +1 -0
- package/dist/controls/kendo/Culture.d.ts +1 -0
- package/dist/controls/kendo/Culture.js +26 -0
- package/dist/controls/kendo/Culture.js.map +1 -0
- package/dist/controls/kendo/DataSource.d.ts +4 -0
- package/dist/controls/kendo/DataSource.js +2 -0
- package/dist/controls/kendo/DataSource.js.map +1 -0
- package/dist/controls/kendo/Editor.d.ts +18 -0
- package/dist/controls/kendo/Editor.js +113 -0
- package/dist/controls/kendo/Editor.js.map +1 -0
- package/dist/controls/kendo/Grid.d.ts +50 -0
- package/dist/controls/kendo/Grid.js +214 -0
- package/dist/controls/kendo/Grid.js.map +1 -0
- package/dist/controls/kendo/Menu.d.ts +14 -0
- package/dist/controls/kendo/Menu.js +86 -0
- package/dist/controls/kendo/Menu.js.map +1 -0
- package/dist/controls/kendo/Tree.d.ts +16 -0
- package/dist/controls/kendo/Tree.js +104 -0
- package/dist/controls/kendo/Tree.js.map +1 -0
- package/dist/controls/user/Content.d.ts +16 -0
- package/dist/controls/user/Content.js +45 -0
- package/dist/controls/user/Content.js.map +1 -0
- package/dist/controls/user/FileSelector.d.ts +17 -0
- package/dist/controls/user/FileSelector.js +54 -0
- package/dist/controls/user/FileSelector.js.map +1 -0
- package/dist/controls/user/LabeledControl.d.ts +14 -0
- package/dist/controls/user/LabeledControl.js +32 -0
- package/dist/controls/user/LabeledControl.js.map +1 -0
- package/dist/controls/user/ListItem.d.ts +30 -0
- package/dist/controls/user/ListItem.js +61 -0
- package/dist/controls/user/ListItem.js.map +1 -0
- package/dist/event.d.ts +17 -3
- package/dist/event.js +1 -0
- package/dist/event.js.map +1 -1
- package/dist/{src → framework}/View.d.ts +1 -1
- package/dist/{src → framework}/View.js +19 -22
- package/dist/framework/View.js.map +1 -0
- package/dist/{src → framework}/ViewModel.d.ts +0 -1
- package/dist/{src → framework}/ViewModel.js +59 -82
- package/dist/framework/ViewModel.js.map +1 -0
- package/dist/{src → framework}/attributes.d.ts +0 -0
- package/dist/framework/attributes.js +2 -0
- package/dist/{src → framework}/attributes.js.map +1 -1
- package/dist/{src → framework}/event.d.ts +3 -3
- package/dist/framework/event.js +26 -0
- package/dist/framework/event.js.map +1 -0
- package/dist/{src → framework}/observable.d.ts +0 -0
- package/dist/framework/observable.js +59 -0
- package/dist/framework/observable.js.map +1 -0
- package/dist/{src → framework}/style.d.ts +0 -0
- package/dist/{src → framework}/style.js +4 -8
- package/dist/framework/style.js.map +1 -0
- package/dist/framework/types.d.ts +85 -0
- package/dist/framework/types.js +2 -0
- package/dist/{src → framework}/types.js.map +1 -1
- package/dist/{src → framework}/userAgent.d.ts +0 -0
- package/dist/{src → framework}/userAgent.js +3 -6
- package/dist/framework/userAgent.js.map +1 -0
- package/dist/index.d.ts +8 -6
- package/dist/index.js +9 -21
- package/dist/index.js.map +1 -1
- package/dist/observable.d.ts +12 -0
- package/dist/{src/observable.js → observable.js} +0 -0
- package/dist/observable.js.map +1 -0
- package/dist/style.js +2 -2
- package/dist/style.js.map +1 -1
- package/dist/userAgent.js.map +1 -1
- package/dist/utilities/blob.d.ts +2 -0
- package/dist/utilities/blob.js +19 -0
- package/dist/utilities/blob.js.map +1 -0
- package/dist/utilities/common.d.ts +17 -0
- package/dist/utilities/common.js +193 -0
- package/dist/utilities/common.js.map +1 -0
- package/dist/utilities/fetch.d.ts +5 -0
- package/dist/utilities/fetch.js +110 -0
- package/dist/utilities/fetch.js.map +1 -0
- package/dist/utilities/notification.d.ts +5 -0
- package/dist/utilities/notification.js +67 -0
- package/dist/utilities/notification.js.map +1 -0
- package/dist/utilities/router.d.ts +20 -0
- package/dist/utilities/router.js +63 -0
- package/dist/utilities/router.js.map +1 -0
- package/dist/utilities/webSocket.d.ts +1 -0
- package/dist/utilities/webSocket.js +53 -0
- package/dist/utilities/webSocket.js.map +1 -0
- package/package.json +13 -6
- package/dist/examples/example-01.d.ts +0 -1
- package/dist/examples/example-01.js +0 -43
- package/dist/examples/example-01.js.map +0 -1
- package/dist/src/View.js.map +0 -1
- package/dist/src/ViewModel.js.map +0 -1
- package/dist/src/attributes.js +0 -3
- package/dist/src/event.js +0 -30
- package/dist/src/event.js.map +0 -1
- package/dist/src/index.d.ts +0 -7
- package/dist/src/index.js +0 -22
- package/dist/src/index.js.map +0 -1
- package/dist/src/observable.js.map +0 -1
- package/dist/src/style.js.map +0 -1
- package/dist/src/types.d.ts +0 -85
- package/dist/src/types.js +0 -3
- package/dist/src/userAgent.js.map +0 -1
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { View, registerView } from "../../framework/View";
|
|
2
|
+
import { ViewModel, extendViewModel } from "../../framework/ViewModel";
|
|
3
|
+
import { unwrap, isObservable } from "knockout";
|
|
4
|
+
import { isObservableProperty, observableProperty } from "../../framework/observable";
|
|
5
|
+
import { EditorView, basicSetup } from "codemirror";
|
|
6
|
+
import { EditorState } from "@codemirror/state";
|
|
7
|
+
import { keymap } from "@codemirror/view";
|
|
8
|
+
import { json } from "@codemirror/lang-json";
|
|
9
|
+
import { indentWithTab } from "@codemirror/commands";
|
|
10
|
+
import { foldAll } from "@codemirror/language";
|
|
11
|
+
import { ButtonView } from "../html/Button";
|
|
12
|
+
import { DivView } from "../html/Div";
|
|
13
|
+
export class JsonEditorViewModel extends ViewModel {
|
|
14
|
+
constructor(options) {
|
|
15
|
+
super(options);
|
|
16
|
+
if (options) {
|
|
17
|
+
if (isObservableProperty(options.value)) {
|
|
18
|
+
this.value = options.value;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
this.value = observableProperty(options.value);
|
|
22
|
+
}
|
|
23
|
+
if (!options.eventListeners) {
|
|
24
|
+
options.eventListeners = {};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
value;
|
|
29
|
+
}
|
|
30
|
+
export class JsonEditorView extends View {
|
|
31
|
+
constructor(viewModel, designTimeOptions) {
|
|
32
|
+
super({
|
|
33
|
+
tagName: "div",
|
|
34
|
+
viewModel: viewModel
|
|
35
|
+
}, extendViewModel({
|
|
36
|
+
viewType: "JsonEditor",
|
|
37
|
+
attributes: {
|
|
38
|
+
tabindex: 1
|
|
39
|
+
},
|
|
40
|
+
style: {
|
|
41
|
+
display: "flex",
|
|
42
|
+
flexDirection: "column",
|
|
43
|
+
border: "1px solid #a3d0e4"
|
|
44
|
+
}
|
|
45
|
+
}, designTimeOptions));
|
|
46
|
+
}
|
|
47
|
+
editor;
|
|
48
|
+
build() {
|
|
49
|
+
super.build();
|
|
50
|
+
const viewModel = this.viewModel;
|
|
51
|
+
const foldAllButton = new ButtonView({
|
|
52
|
+
content: "Collapse all",
|
|
53
|
+
style: {
|
|
54
|
+
margin: "3px"
|
|
55
|
+
},
|
|
56
|
+
eventListeners: {
|
|
57
|
+
click: {
|
|
58
|
+
listener: () => {
|
|
59
|
+
foldAll(this.editor);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
const saveButton = new ButtonView({
|
|
65
|
+
content: "Save",
|
|
66
|
+
style: {
|
|
67
|
+
margin: "3px"
|
|
68
|
+
},
|
|
69
|
+
eventListeners: {
|
|
70
|
+
click: {
|
|
71
|
+
listener: () => {
|
|
72
|
+
if (isObservableProperty(viewModel.value)) {
|
|
73
|
+
viewModel.value.set(this.editor.state.doc.toString());
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
const buttons = new DivView({
|
|
80
|
+
style: {
|
|
81
|
+
display: "flex"
|
|
82
|
+
},
|
|
83
|
+
children: [
|
|
84
|
+
foldAllButton,
|
|
85
|
+
saveButton
|
|
86
|
+
]
|
|
87
|
+
});
|
|
88
|
+
this.element.appendChild(buttons.render());
|
|
89
|
+
const state = EditorState.create({
|
|
90
|
+
extensions: [
|
|
91
|
+
basicSetup,
|
|
92
|
+
json(),
|
|
93
|
+
EditorView.lineWrapping,
|
|
94
|
+
keymap.of([indentWithTab])
|
|
95
|
+
]
|
|
96
|
+
});
|
|
97
|
+
this.editor = new EditorView({
|
|
98
|
+
state: state,
|
|
99
|
+
parent: this.element,
|
|
100
|
+
});
|
|
101
|
+
this.editor.dom.style.overflow = "auto";
|
|
102
|
+
this.editor.dispatch({ changes: { from: 0, to: this.editor.state.doc.length, insert: unwrap(viewModel.value) } });
|
|
103
|
+
if (isObservable(viewModel.value)) {
|
|
104
|
+
viewModel.value.subscribe((html) => {
|
|
105
|
+
this.editor.dispatch({ changes: { from: 0, to: this.editor.state.doc.length, insert: html } });
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
registerView(JsonEditorViewModel, JsonEditorView);
|
|
111
|
+
//# sourceMappingURL=JsonEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonEditor.js","sourceRoot":"","sources":["../../../src/controls/codeMirror/JsonEditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAoB,SAAS,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEzF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,WAAW,EAAC,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAMtC,MAAM,OAAO,mBAAoB,SAAQ,SAAS;IAC9C,YAAY,OAAmC;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,OAAO,EAAE;YACT,IAAI,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACrC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;aAC9B;iBAAM;gBACH,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aAClD;YACD,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;gBACzB,OAAO,CAAC,cAAc,GAAG,EAAE,CAAA;aAC9B;SAEJ;IACL,CAAC;IAEQ,KAAK,CAA6B;CAC9C;AAED,MAAM,OAAO,cAAe,SAAQ,IAAgC;IAChE,YAAY,SAAqC,EAAE,iBAAoC;QACnF,KAAK,CACD;YACI,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,SAAS;SACvB,EACD,eAAe,CACX;YACI,QAAQ,EAAE,YAAY;YACtB,UAAU,EAAE;gBACR,QAAQ,EAAE,CAAC;aACd;YACD,KAAK,EAAE;gBACH,OAAO,EAAE,MAAM;gBACf,aAAa,EAAE,QAAQ;gBACvB,MAAM,EAAE,mBAAmB;aAC9B;SACJ,EACD,iBAAiB,CACpB,CACJ,CAAC;IACN,CAAC;IAEO,MAAM,CAAa;IAE3B,KAAK;QACD,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC;YACjC,OAAO,EAAE,cAAc;YACvB,KAAK,EAAE;gBACH,MAAM,EAAE,KAAK;aAChB;YACD,cAAc,EAAE;gBACZ,KAAK,EAAE;oBACH,QAAQ,EAAE,GAAG,EAAE;wBACX,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACzB,CAAC;iBACJ;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC;YAC9B,OAAO,EAAE,MAAM;YACf,KAAK,EAAE;gBACH,MAAM,EAAE,KAAK;aAChB;YACD,cAAc,EAAE;gBACZ,KAAK,EAAE;oBACH,QAAQ,EAAE,GAAG,EAAE;wBACX,IAAI,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;4BACvC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;yBACzD;oBACL,CAAC;iBACJ;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;YACxB,KAAK,EAAE;gBACH,OAAO,EAAE,MAAM;aAClB;YACD,QAAQ,EAAE;gBACN,aAAa;gBACb,UAAU;aACb;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAE3C,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC;YAC7B,UAAU,EAAE;gBACR,UAAU;gBACV,IAAI,EAAE;gBACN,UAAU,CAAC,YAAY;gBACvB,MAAM,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;aAC7B;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC;YACzB,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,IAAI,CAAC,OAAO;SAEvB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;QAGxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAkB,EAAE,EAAE,CAAC,CAAC;QAGnI,IAAI,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAC/B,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAY,EAAE,EAAE;gBACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACnG,CAAC,CAAC,CAAC;SACN;IACL,CAAC;CACJ;AAED,YAAY,CACR,mBAAmB,EACnB,cAAc,CACjB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Subscribable } from "knockout";
|
|
2
|
+
import { ViewModel, ViewModelOptions } from "../../framework/ViewModel";
|
|
3
|
+
import { View } from "../../framework/View";
|
|
4
|
+
export interface ButtonViewModelOptions extends ViewModelOptions {
|
|
5
|
+
content?: string | ViewModel | Subscribable<string | ViewModel>;
|
|
6
|
+
}
|
|
7
|
+
export declare class ButtonViewModel extends ViewModel implements ButtonViewModelOptions {
|
|
8
|
+
constructor(options: ButtonViewModelOptions);
|
|
9
|
+
readonly content: string | ViewModel | Subscribable<string | ViewModel>;
|
|
10
|
+
}
|
|
11
|
+
export declare class ButtonView extends View<ButtonViewModelOptions> {
|
|
12
|
+
constructor(viewModel: ButtonViewModelOptions, designTimeOptions?: ViewModelOptions);
|
|
13
|
+
build(): void;
|
|
14
|
+
private buildContent;
|
|
15
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { unwrap, isSubscribable } from "knockout";
|
|
2
|
+
import { ViewModel, extendViewModel } from "../../framework/ViewModel";
|
|
3
|
+
import { View, getView, registerView } from "../../framework/View";
|
|
4
|
+
export class ButtonViewModel extends ViewModel {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
super(options);
|
|
7
|
+
this.content = options.content;
|
|
8
|
+
}
|
|
9
|
+
content;
|
|
10
|
+
}
|
|
11
|
+
export class ButtonView extends View {
|
|
12
|
+
constructor(viewModel, designTimeOptions) {
|
|
13
|
+
super({
|
|
14
|
+
tagName: "button",
|
|
15
|
+
viewModel: viewModel
|
|
16
|
+
}, extendViewModel({
|
|
17
|
+
viewType: "Button"
|
|
18
|
+
}, designTimeOptions));
|
|
19
|
+
}
|
|
20
|
+
build() {
|
|
21
|
+
super.build();
|
|
22
|
+
const viewModel = this.viewModel;
|
|
23
|
+
if (viewModel.content) {
|
|
24
|
+
if (isSubscribable(viewModel.content)) {
|
|
25
|
+
this.buildContent(unwrap(viewModel.content));
|
|
26
|
+
viewModel.content.subscribe((content) => {
|
|
27
|
+
this.buildContent(content);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
this.buildContent(viewModel.content);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
buildContent(content) {
|
|
36
|
+
if (content == null || content === undefined) {
|
|
37
|
+
this.element.innerText = null;
|
|
38
|
+
}
|
|
39
|
+
else if (typeof content === "string") {
|
|
40
|
+
this.element.innerText = content;
|
|
41
|
+
}
|
|
42
|
+
else if (content instanceof ViewModel) {
|
|
43
|
+
this.setChildren(getView(content));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
registerView(ButtonViewModel, ButtonView);
|
|
48
|
+
//# sourceMappingURL=Button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/controls/html/Button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAgB,cAAc,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,SAAS,EAAoB,eAAe,EAAE,MAAM,2BAA2B,CAAA;AACxF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAMnE,MAAM,OAAO,eAAgB,SAAQ,SAAS;IAC1C,YAAY,OAA+B;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACnC,CAAC;IAEQ,OAAO,CAAwD;CAC3E;AAED,MAAM,OAAO,UAAW,SAAQ,IAA4B;IACxD,YAAY,SAAiC,EAAE,iBAAoC;QAC/E,KAAK,CACD;YACI,OAAO,EAAE,QAAQ;YACjB,SAAS,EAAE,SAAS;SACvB,EACD,eAAe,CACX;YACI,QAAQ,EAAE,QAAQ;SACrB,EACD,iBAAiB,CACpB,CACJ,CAAC;IACN,CAAC;IAED,KAAK;QACD,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,IAAI,SAAS,CAAC,OAAO,EAAE;YACnB,IAAI,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;gBACnC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC7C,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;oBACpC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC,CAAC,CAAC;aACN;iBAAM;gBACH,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;aACxC;SACJ;IACL,CAAC;IAEO,YAAY,CAAC,OAA2B;QAC5C,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE;YAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;SACjC;aACI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC;SACpC;aACI,IAAI,OAAO,YAAY,SAAS,EAAE;YACnC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAoB,CAAC,CAAC,CAAC;SACnD;IACL,CAAC;CACJ;AAED,YAAY,CACR,eAAe,EACf,UAAU,CACb,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { View, IView } from "../../framework/View";
|
|
2
|
+
import { ViewModel, ViewModelOptions } from "../../framework/ViewModel";
|
|
3
|
+
export declare class DivViewModel extends ViewModel implements ViewModelOptions {
|
|
4
|
+
}
|
|
5
|
+
export interface DivViewOptions extends ViewModelOptions {
|
|
6
|
+
children?: Array<IView>;
|
|
7
|
+
}
|
|
8
|
+
export declare class DivView extends View<ViewModelOptions> {
|
|
9
|
+
constructor(viewModel: DivViewOptions, designTimeOptions?: ViewModelOptions);
|
|
10
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { View, registerView } from "../../framework/View";
|
|
2
|
+
import { ViewModel, extendViewModel } from "../../framework/ViewModel";
|
|
3
|
+
export class DivViewModel extends ViewModel {
|
|
4
|
+
}
|
|
5
|
+
export class DivView extends View {
|
|
6
|
+
constructor(viewModel, designTimeOptions) {
|
|
7
|
+
super({
|
|
8
|
+
tagName: "div",
|
|
9
|
+
viewModel: viewModel,
|
|
10
|
+
children: viewModel.children
|
|
11
|
+
}, extendViewModel({
|
|
12
|
+
viewType: "Div"
|
|
13
|
+
}, designTimeOptions));
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
registerView(DivViewModel, DivView);
|
|
17
|
+
//# sourceMappingURL=Div.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Div.js","sourceRoot":"","sources":["../../../src/controls/html/Div.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAS,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAoB,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEzF,MAAM,OAAO,YAAa,SAAQ,SAAS;CAE1C;AAMD,MAAM,OAAO,OAAQ,SAAQ,IAAsB;IAC/C,YAAY,SAAyB,EAAE,iBAAoC;QACvE,KAAK,CACD;YACI,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,SAAS;YACpB,QAAQ,EAAE,SAAS,CAAC,QAAQ;SAC/B,EACD,eAAe,CACX;YACI,QAAQ,EAAE,KAAK;SAClB,EACD,iBAAiB,CACpB,CACJ,CAAC;IACN,CAAC;CACJ;AAED,YAAY,CACR,YAAY,EACZ,OAAO,CACV,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { View } from "../../framework/View";
|
|
2
|
+
import { ViewModel, ViewModelOptions } from "../../framework/ViewModel";
|
|
3
|
+
export declare class ImageViewModel extends ViewModel {
|
|
4
|
+
}
|
|
5
|
+
export declare class ImageView extends View<ViewModelOptions> {
|
|
6
|
+
constructor(viewModel: ViewModelOptions, designTimeOptions?: ViewModelOptions);
|
|
7
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { View, registerView } from "../../framework/View";
|
|
2
|
+
import { ViewModel, extendViewModel } from "../../framework/ViewModel";
|
|
3
|
+
export class ImageViewModel extends ViewModel {
|
|
4
|
+
}
|
|
5
|
+
export class ImageView extends View {
|
|
6
|
+
constructor(viewModel, designTimeOptions) {
|
|
7
|
+
super({
|
|
8
|
+
tagName: "img",
|
|
9
|
+
viewModel: viewModel
|
|
10
|
+
}, extendViewModel({
|
|
11
|
+
viewType: "Image"
|
|
12
|
+
}, designTimeOptions));
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
registerView(ImageViewModel, ImageView);
|
|
16
|
+
//# sourceMappingURL=Image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Image.js","sourceRoot":"","sources":["../../../src/controls/html/Image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAoB,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEzF,MAAM,OAAO,cAAe,SAAQ,SAAS;CAE5C;AAED,MAAM,OAAO,SAAU,SAAQ,IAAsB;IACjD,YAAY,SAA2B,EAAE,iBAAoC;QACzE,KAAK,CACD;YACI,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,SAAS;SACvB,EACD,eAAe,CACX;YACI,QAAQ,EAAE,OAAO;SACpB,EACD,iBAAiB,CACpB,CACJ,CAAC;IACN,CAAC;CACJ;AAED,YAAY,CACR,cAAc,EACd,SAAS,CACZ,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { View } from "../../framework/View";
|
|
2
|
+
import { ViewModel, ViewModelOptions } from "../../framework/ViewModel";
|
|
3
|
+
import { ObservableProperty } from "../../framework/observable";
|
|
4
|
+
export type InputType = "text" | "checkbox" | "file" | "integer" | "float" | "range";
|
|
5
|
+
export type ValueUpdateMode = "OnChange" | "OnInput";
|
|
6
|
+
export interface InputViewModelOptions<TValue> extends ViewModelOptions {
|
|
7
|
+
value?: TValue | ObservableProperty<TValue>;
|
|
8
|
+
inputValidator?: (event: Event, inputViewModel: InputViewModelOptions<TValue>, value: string) => Promise<boolean>;
|
|
9
|
+
placeholder?: string | ObservableProperty<string>;
|
|
10
|
+
valueUpdateMode?: ValueUpdateMode;
|
|
11
|
+
min?: number;
|
|
12
|
+
max?: number;
|
|
13
|
+
step?: number;
|
|
14
|
+
type?: InputType;
|
|
15
|
+
}
|
|
16
|
+
declare abstract class InputViewModel<TValue> extends ViewModel {
|
|
17
|
+
protected constructor(inputType: InputType, options?: InputViewModelOptions<TValue>);
|
|
18
|
+
readonly value: ObservableProperty<TValue>;
|
|
19
|
+
readonly inputValidator: (event: Event, inputViewModel: InputViewModelOptions<TValue>, value: string) => Promise<boolean>;
|
|
20
|
+
readonly placeholder: ObservableProperty<string>;
|
|
21
|
+
readonly valueUpdateMode: ValueUpdateMode;
|
|
22
|
+
readonly type: InputType;
|
|
23
|
+
}
|
|
24
|
+
export declare class InputTextViewModel extends InputViewModel<string> {
|
|
25
|
+
constructor(options?: InputViewModelOptions<string>);
|
|
26
|
+
}
|
|
27
|
+
export declare class InputCheckboxViewModel extends InputViewModel<boolean> {
|
|
28
|
+
constructor(options?: InputViewModelOptions<boolean>);
|
|
29
|
+
}
|
|
30
|
+
export declare class InputFileViewModel extends InputViewModel<FileList> {
|
|
31
|
+
constructor(options?: InputViewModelOptions<FileList>);
|
|
32
|
+
}
|
|
33
|
+
export declare class InputIntegerViewModel extends InputViewModel<number> {
|
|
34
|
+
constructor(options?: InputViewModelOptions<number>);
|
|
35
|
+
}
|
|
36
|
+
export declare class InputFloatViewModel extends InputViewModel<number> {
|
|
37
|
+
constructor(options?: InputViewModelOptions<number>);
|
|
38
|
+
}
|
|
39
|
+
export declare class InputView<TValue> extends View<InputViewModelOptions<TValue>> {
|
|
40
|
+
constructor(viewModel: InputViewModelOptions<TValue>, designTimeOptions?: InputViewModelOptions<TValue>);
|
|
41
|
+
protected build(): void;
|
|
42
|
+
}
|
|
43
|
+
export {};
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { isSubscribable, unwrap, isObservable } from "knockout";
|
|
2
|
+
import { View, registerView } from "../../framework/View";
|
|
3
|
+
import { ViewModel, extendViewModel, isNullOrUndefined } from "../../framework/ViewModel";
|
|
4
|
+
import { observableProperty } from "../../framework/observable";
|
|
5
|
+
import { isInteger, isFloat } from "../../utilities/common";
|
|
6
|
+
import { isObservableProperty } from "../../framework/observable";
|
|
7
|
+
class InputViewModel extends ViewModel {
|
|
8
|
+
constructor(inputType, options) {
|
|
9
|
+
super(options);
|
|
10
|
+
if (options) {
|
|
11
|
+
if (isObservableProperty(options.value)) {
|
|
12
|
+
this.value = options.value;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
this.value = observableProperty(options.value);
|
|
16
|
+
}
|
|
17
|
+
this.inputValidator = options.inputValidator;
|
|
18
|
+
this.placeholder = options.placeholder;
|
|
19
|
+
this.valueUpdateMode = options.valueUpdateMode;
|
|
20
|
+
this.type = options.type;
|
|
21
|
+
}
|
|
22
|
+
this.type = inputType;
|
|
23
|
+
}
|
|
24
|
+
value;
|
|
25
|
+
inputValidator;
|
|
26
|
+
placeholder;
|
|
27
|
+
valueUpdateMode = "OnChange";
|
|
28
|
+
type;
|
|
29
|
+
}
|
|
30
|
+
export class InputTextViewModel extends InputViewModel {
|
|
31
|
+
constructor(options) {
|
|
32
|
+
super("text", options);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class InputCheckboxViewModel extends InputViewModel {
|
|
36
|
+
constructor(options) {
|
|
37
|
+
super("checkbox", options);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export class InputFileViewModel extends InputViewModel {
|
|
41
|
+
constructor(options) {
|
|
42
|
+
super("file", options);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export class InputIntegerViewModel extends InputViewModel {
|
|
46
|
+
constructor(options) {
|
|
47
|
+
super("integer", options);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export class InputFloatViewModel extends InputViewModel {
|
|
51
|
+
constructor(options) {
|
|
52
|
+
super("float", options);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export class InputView extends View {
|
|
56
|
+
constructor(viewModel, designTimeOptions) {
|
|
57
|
+
super({
|
|
58
|
+
tagName: "input",
|
|
59
|
+
viewModel: viewModel,
|
|
60
|
+
}, extendViewModel({
|
|
61
|
+
viewType: "Input"
|
|
62
|
+
}, designTimeOptions));
|
|
63
|
+
}
|
|
64
|
+
build() {
|
|
65
|
+
super.build();
|
|
66
|
+
const viewModel = this.viewModel;
|
|
67
|
+
if (!viewModel.valueUpdateMode) {
|
|
68
|
+
viewModel.valueUpdateMode = "OnChange";
|
|
69
|
+
}
|
|
70
|
+
const input = this.element;
|
|
71
|
+
input.type = viewModel.type;
|
|
72
|
+
if (!isNullOrUndefined(viewModel.min)) {
|
|
73
|
+
input.min = viewModel.min;
|
|
74
|
+
}
|
|
75
|
+
if (!isNullOrUndefined(viewModel.max)) {
|
|
76
|
+
input.max = viewModel.max;
|
|
77
|
+
}
|
|
78
|
+
if (!isNullOrUndefined(viewModel.step)) {
|
|
79
|
+
input.step = viewModel.step;
|
|
80
|
+
}
|
|
81
|
+
switch (viewModel.type) {
|
|
82
|
+
case "checkbox":
|
|
83
|
+
input.checked = unwrap(viewModel.value);
|
|
84
|
+
if (isObservable(viewModel.value)) {
|
|
85
|
+
viewModel.value.subscribe((value) => {
|
|
86
|
+
input.checked = value;
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
break;
|
|
90
|
+
case "file":
|
|
91
|
+
break;
|
|
92
|
+
default:
|
|
93
|
+
const value = unwrap(viewModel.value);
|
|
94
|
+
if (value) {
|
|
95
|
+
input.value = value;
|
|
96
|
+
}
|
|
97
|
+
if (isObservable(viewModel.value)) {
|
|
98
|
+
viewModel.value.subscribe((value) => {
|
|
99
|
+
input.value = value;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const placeholder = unwrap(viewModel.placeholder);
|
|
104
|
+
if (placeholder) {
|
|
105
|
+
input.placeholder = placeholder;
|
|
106
|
+
}
|
|
107
|
+
if (isSubscribable(viewModel.placeholder)) {
|
|
108
|
+
viewModel.placeholder.subscribe((placeholder) => {
|
|
109
|
+
if (placeholder) {
|
|
110
|
+
input.placeholder = placeholder;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
input.removeAttribute("placeholder");
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
if (this.viewModel.valueUpdateMode === "OnChange") {
|
|
118
|
+
this.element.addEventListener("change", handleEvent);
|
|
119
|
+
}
|
|
120
|
+
if (this.viewModel.valueUpdateMode === "OnInput" || viewModel.inputValidator) {
|
|
121
|
+
this.element.addEventListener("input", handleEvent);
|
|
122
|
+
}
|
|
123
|
+
async function handleEvent(event) {
|
|
124
|
+
let newValue;
|
|
125
|
+
switch (viewModel.type) {
|
|
126
|
+
case "checkbox":
|
|
127
|
+
newValue = input.checked;
|
|
128
|
+
break;
|
|
129
|
+
case "file":
|
|
130
|
+
newValue = input.files;
|
|
131
|
+
break;
|
|
132
|
+
default:
|
|
133
|
+
newValue = input.value;
|
|
134
|
+
if (newValue + "" === "") {
|
|
135
|
+
newValue = null;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (viewModel.inputValidator) {
|
|
139
|
+
if (!await viewModel.inputValidator(event, viewModel, newValue)) {
|
|
140
|
+
input.value = unwrap(viewModel.value);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
;
|
|
144
|
+
}
|
|
145
|
+
if (viewModel.type === "integer") {
|
|
146
|
+
if (isInteger(newValue)) {
|
|
147
|
+
newValue = parseInt(newValue);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
input.value = unwrap(viewModel.value);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (viewModel.type === "float") {
|
|
155
|
+
if (isFloat(newValue)) {
|
|
156
|
+
newValue = parseFloat(newValue);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
input.value = unwrap(viewModel.value);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (isObservableProperty(viewModel.value)) {
|
|
164
|
+
if ((event.type === "change" && viewModel.valueUpdateMode === "OnChange") || (event.type === "input" && viewModel.valueUpdateMode === "OnInput")) {
|
|
165
|
+
viewModel.value.set(newValue);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
viewModel.value.set(newValue, false);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
registerView(InputTextViewModel, InputView);
|
|
175
|
+
registerView(InputCheckboxViewModel, InputView);
|
|
176
|
+
registerView(InputFileViewModel, InputView);
|
|
177
|
+
registerView(InputIntegerViewModel, InputView);
|
|
178
|
+
registerView(InputFloatViewModel, InputView);
|
|
179
|
+
//# sourceMappingURL=Input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Input.js","sourceRoot":"","sources":["../../../src/controls/html/Input.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { View } from "../../framework/View";
|
|
2
|
+
import { ViewModel, ViewModelOptions } from "../../framework/ViewModel";
|
|
3
|
+
import { ObservableProperty, ObservableArrayProperty } from "../../framework/observable";
|
|
4
|
+
export interface SelectViewModelOptions<TItem, TValue> extends ViewModelOptions {
|
|
5
|
+
value?: TValue | ObservableProperty<TValue>;
|
|
6
|
+
items?: Array<TItem> | ObservableArrayProperty<TItem>;
|
|
7
|
+
textFunction: (item: TItem) => string;
|
|
8
|
+
valueFunction: (item: TItem) => TValue;
|
|
9
|
+
inputValidator?: (event: Event, selectViewModel: SelectViewModelOptions<TItem, TValue>, value: TValue) => Promise<boolean>;
|
|
10
|
+
emptyItemText?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare class SelectViewModel<TItem, TValue> extends ViewModel {
|
|
13
|
+
constructor(options?: SelectViewModelOptions<TItem, TValue>);
|
|
14
|
+
readonly value: ObservableProperty<TValue>;
|
|
15
|
+
readonly items: ObservableArrayProperty<TItem>;
|
|
16
|
+
readonly textFunction: (item: TItem) => string;
|
|
17
|
+
readonly valueFunction: (item: TItem) => TValue;
|
|
18
|
+
readonly inputValidator: (event: Event, inputViewModel: SelectViewModel<TItem, TValue>, value: TValue) => Promise<boolean>;
|
|
19
|
+
readonly emptyItemText: string;
|
|
20
|
+
}
|
|
21
|
+
export declare class SelectView<TItem, TValue> extends View<SelectViewModelOptions<TItem, TValue>> {
|
|
22
|
+
constructor(viewModel: SelectViewModelOptions<TItem, TValue>, designTimeOptions?: ViewModelOptions);
|
|
23
|
+
protected build(): void;
|
|
24
|
+
private itemDictionary;
|
|
25
|
+
private setItems;
|
|
26
|
+
private setSelectedValue;
|
|
27
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { unwrap, isSubscribable } from "knockout";
|
|
2
|
+
import { View, registerView } from "../../framework/View";
|
|
3
|
+
import { ViewModel, extendViewModel } from "../../framework/ViewModel";
|
|
4
|
+
import { isObservableProperty, observableArrayProperty, observableProperty } from "../../framework/observable";
|
|
5
|
+
export class SelectViewModel extends ViewModel {
|
|
6
|
+
constructor(options) {
|
|
7
|
+
super(options);
|
|
8
|
+
if (options) {
|
|
9
|
+
this.textFunction = options.textFunction;
|
|
10
|
+
this.valueFunction = options.valueFunction;
|
|
11
|
+
this.inputValidator = options.inputValidator;
|
|
12
|
+
if (isObservableProperty(options.value)) {
|
|
13
|
+
this.value = options.value;
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
this.value = observableProperty(options.value);
|
|
17
|
+
}
|
|
18
|
+
if (isObservableProperty(options.items)) {
|
|
19
|
+
this.items = options.items;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
this.items = observableArrayProperty(options.items);
|
|
23
|
+
}
|
|
24
|
+
this.emptyItemText = options.emptyItemText;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
value;
|
|
28
|
+
items;
|
|
29
|
+
textFunction;
|
|
30
|
+
valueFunction;
|
|
31
|
+
inputValidator;
|
|
32
|
+
emptyItemText;
|
|
33
|
+
}
|
|
34
|
+
export class SelectView extends View {
|
|
35
|
+
constructor(viewModel, designTimeOptions) {
|
|
36
|
+
super({
|
|
37
|
+
tagName: "select",
|
|
38
|
+
viewModel: viewModel
|
|
39
|
+
}, extendViewModel({
|
|
40
|
+
viewType: "Select"
|
|
41
|
+
}, designTimeOptions));
|
|
42
|
+
}
|
|
43
|
+
build() {
|
|
44
|
+
super.build();
|
|
45
|
+
const select = this.element;
|
|
46
|
+
const viewModel = this.viewModel;
|
|
47
|
+
this.setItems(unwrap(viewModel.items));
|
|
48
|
+
if (isSubscribable(viewModel.items)) {
|
|
49
|
+
viewModel.items.subscribe((items) => {
|
|
50
|
+
this.setItems(items);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
this.setSelectedValue(unwrap(viewModel.value));
|
|
54
|
+
if (isSubscribable(viewModel.value)) {
|
|
55
|
+
viewModel.value.subscribe((value) => {
|
|
56
|
+
this.setSelectedValue(value);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
this.element.addEventListener("change", async (event) => {
|
|
60
|
+
let newValue = select.value;
|
|
61
|
+
if (newValue + "" === "") {
|
|
62
|
+
newValue = null;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
newValue = this.viewModel.valueFunction(this.itemDictionary[newValue.toString()]);
|
|
66
|
+
}
|
|
67
|
+
if (viewModel.inputValidator) {
|
|
68
|
+
if (!await viewModel.inputValidator(event, viewModel, newValue)) {
|
|
69
|
+
select.value = unwrap(viewModel.value);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
;
|
|
73
|
+
}
|
|
74
|
+
if (isObservableProperty(viewModel.value)) {
|
|
75
|
+
viewModel.value.set(newValue);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
itemDictionary;
|
|
80
|
+
setItems(items) {
|
|
81
|
+
if (this.element) {
|
|
82
|
+
this.itemDictionary = {};
|
|
83
|
+
if (items) {
|
|
84
|
+
const select = this.element;
|
|
85
|
+
select.innerHTML = null;
|
|
86
|
+
if (this.viewModel.emptyItemText) {
|
|
87
|
+
const emptyOption = document.createElement("option");
|
|
88
|
+
emptyOption.value = "";
|
|
89
|
+
emptyOption.text = this.viewModel.emptyItemText;
|
|
90
|
+
select.options.add(emptyOption);
|
|
91
|
+
}
|
|
92
|
+
items.forEach((item) => {
|
|
93
|
+
const value = this.viewModel.valueFunction(item).toString();
|
|
94
|
+
this.itemDictionary[value] = item;
|
|
95
|
+
var option = document.createElement("option");
|
|
96
|
+
option.value = value;
|
|
97
|
+
option.text = this.viewModel.textFunction(item);
|
|
98
|
+
select.options.add(option);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
setSelectedValue(value) {
|
|
104
|
+
if (this.element) {
|
|
105
|
+
const select = this.element;
|
|
106
|
+
if (value === null || value === undefined) {
|
|
107
|
+
select.value = "";
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
select.value = value.toString();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
registerView(SelectViewModel, SelectView);
|
|
116
|
+
//# sourceMappingURL=Select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../src/controls/html/Select.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { View } from "../../framework/View";
|
|
2
|
+
import { ViewModel, ViewModelOptions } from "../../framework/ViewModel";
|
|
3
|
+
export declare class SpanViewModel extends ViewModel implements ViewModelOptions {
|
|
4
|
+
}
|
|
5
|
+
export declare class SpanView extends View<ViewModelOptions> {
|
|
6
|
+
constructor(viewModel: ViewModelOptions, designTimeOptions?: ViewModelOptions);
|
|
7
|
+
}
|