jpf 4.0.0 → 4.0.2

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 CHANGED
@@ -9,8 +9,8 @@ export interface ViewOptions<TViewModel> {
9
9
  viewModel?: TViewModel;
10
10
  children?: Array<IView> | ObservableArray<IView> | Computed<Array<IView>>;
11
11
  }
12
- export declare abstract class View<TViewModel extends ViewModelOptions = ViewModelOptions> implements IView {
13
- protected constructor(options: ViewOptions<TViewModel>, designTimeOptions?: ViewModelOptions);
12
+ export declare class View<TViewModel extends ViewModelOptions = ViewModelOptions> implements IView {
13
+ constructor(options: ViewOptions<TViewModel>, designTimeOptions?: ViewModelOptions);
14
14
  private readonly tagName;
15
15
  private readonly optionsChildren;
16
16
  private children;
package/dist/View.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"View.js","sourceRoot":"","sources":["../src/View.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"View.js","sourceRoot":"","sources":["../src/View.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,8 @@ import { EventListeners } from "./event";
4
4
  import { Attributes, AttributesSubscribable } from "./attributes";
5
5
  import { Style, StyleSubscribable } from "./style";
6
6
  export interface ViewModelOptions {
7
- classNames?: Array<string> | Subscribable<Array<string>>;
8
7
  attributes?: Attributes | AttributesSubscribable;
8
+ classNames?: Array<string> | Subscribable<Array<string>>;
9
9
  style?: Style | StyleSubscribable;
10
10
  visible?: boolean | Subscribable<boolean>;
11
11
  disabled?: boolean | Subscribable<boolean>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ViewModel_1 = require("../src/ViewModel");
4
+ const View_1 = require("../src/View");
5
+ const knockout_1 = require("knockout");
6
+ var innerHtml = (0, knockout_1.observable)("Hello world!");
7
+ var borderColor = (0, knockout_1.observable)();
8
+ var title = (0, knockout_1.observable)("my tooltip");
9
+ var classNames = (0, knockout_1.observableArray)();
10
+ var viewModel = new ViewModel_1.ViewModel({
11
+ innerHtml: innerHtml,
12
+ attributes: {
13
+ id: "1",
14
+ title: title
15
+ },
16
+ classNames: classNames,
17
+ style: {
18
+ width: "300px",
19
+ height: "30px",
20
+ backgroundColor: "green",
21
+ borderColor: borderColor
22
+ }
23
+ });
24
+ var view = new View_1.View({
25
+ tagName: "div",
26
+ viewModel: viewModel
27
+ }, {
28
+ eventListeners: {
29
+ click: {
30
+ listener: () => {
31
+ innerHtml("Hello world updated");
32
+ borderColor("1px solid red");
33
+ title("my tooltip updated");
34
+ classNames(["classname1", "className2"]);
35
+ },
36
+ options: {
37
+ shiftKey: true
38
+ }
39
+ },
40
+ }
41
+ });
42
+ document.body.appendChild(view.render());
43
+ //# sourceMappingURL=example-01.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example-01.js","sourceRoot":"","sources":["../../examples/example-01.ts"],"names":[],"mappings":";;AAAA,gDAA6C;AAC7C,sCAAmC;AACnC,uCAAuD;AAGvD,IAAI,SAAS,GAAG,IAAA,qBAAU,EAAS,cAAc,CAAC,CAAC;AACnD,IAAI,WAAW,GAAG,IAAA,qBAAU,GAAU,CAAC;AACvC,IAAI,KAAK,GAAG,IAAA,qBAAU,EAAS,YAAY,CAAC,CAAC;AAC7C,IAAI,UAAU,GAAG,IAAA,0BAAe,GAAU,CAAC;AAG3C,IAAI,SAAS,GAAG,IAAI,qBAAS,CAAC;IAC1B,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE;QACR,EAAE,EAAE,GAAG;QACP,KAAK,EAAE,KAAK;KAEf;IACD,UAAU,EAAE,UAAU;IACtB,KAAK,EAAE;QACH,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,MAAM;QACd,eAAe,EAAE,OAAO;QACxB,WAAW,EAAE,WAAW;KAC3B;CACJ,CAAC,CAAC;AAEH,IAAI,IAAI,GAAG,IAAI,WAAI,CACf;IACI,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,SAAS;CACvB,EACD;IACI,cAAc,EAAE;QACZ,KAAK,EAAE;YAEH,QAAQ,EAAE,GAAG,EAAE;gBACX,SAAS,CAAC,qBAAqB,CAAC,CAAC;gBACjC,WAAW,CAAC,eAAe,CAAC,CAAC;gBAC7B,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBAC5B,UAAU,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,EAAE;gBACL,QAAQ,EAAE,IAAI;aACjB;SACJ;KACJ;CACJ,CAAC,CAAC;AAIP,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC"}
@@ -0,0 +1,32 @@
1
+ import "tocca";
2
+ import { ObservableArray, Computed } from "knockout";
3
+ import { ViewModelOptions, ViewModel } from "./ViewModel";
4
+ declare type TagName = "div" | "input" | "a" | "button" | "img" | "select" | "pre" | "form" | "span" | "textarea";
5
+ export interface IView {
6
+ render(): HTMLElement;
7
+ }
8
+ export interface ViewOptions<TViewModel> {
9
+ tagName: TagName;
10
+ viewModel?: TViewModel;
11
+ children?: Array<IView> | ObservableArray<IView> | Computed<Array<IView>>;
12
+ }
13
+ export declare class View<TViewModel = any> implements IView {
14
+ constructor(options: ViewOptions<TViewModel>, designTimeOptions?: ViewModelOptions);
15
+ private readonly tagName;
16
+ private readonly optionsChildren;
17
+ private children;
18
+ private buildChildren;
19
+ protected element: HTMLElement;
20
+ protected readonly viewModel: TViewModel;
21
+ protected build(): void;
22
+ protected remove(): void;
23
+ protected addChild(child: IView): View<TViewModel>;
24
+ protected setChildren(...children: Array<IView>): View<TViewModel>;
25
+ protected empty(): void;
26
+ render(): HTMLElement;
27
+ }
28
+ export declare var viewDictionary: Map<any, any>;
29
+ export declare function registerView(viewModel: any, resolver: any): void;
30
+ export declare function getView(viewModel: ViewModel): View;
31
+ export declare function render(viewModel: ViewModel): HTMLElement;
32
+ export {};
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.render = exports.getView = exports.registerView = exports.viewDictionary = exports.View = void 0;
4
+ require("tocca");
5
+ const knockout_1 = require("knockout");
6
+ const ViewModel_1 = require("./ViewModel");
7
+ class View {
8
+ constructor(options, designTimeOptions) {
9
+ this.children = new Array();
10
+ this.tagName = options.tagName;
11
+ this.viewModel = (0, ViewModel_1.extendViewModel)(options.viewModel, designTimeOptions);
12
+ this.optionsChildren = options.children;
13
+ this.children = (0, knockout_1.unwrap)(options.children);
14
+ }
15
+ buildChildren() {
16
+ if (this.element && this.children && this.children.length > 0) {
17
+ const documentFragment = document.createDocumentFragment();
18
+ this.children.forEach((childView) => {
19
+ documentFragment.appendChild(childView.render());
20
+ });
21
+ this.element.appendChild(documentFragment);
22
+ }
23
+ }
24
+ build() {
25
+ (0, ViewModel_1.applyViewModelToElement)(this.viewModel, this.element);
26
+ if (this.children) {
27
+ this.buildChildren();
28
+ }
29
+ if ((0, knockout_1.isObservable)(this.optionsChildren)) {
30
+ this.optionsChildren.subscribe((children) => {
31
+ this.setChildren(...children);
32
+ });
33
+ }
34
+ }
35
+ remove() {
36
+ if (this.element) {
37
+ if (this.element.remove) {
38
+ this.element.remove();
39
+ }
40
+ else {
41
+ if (this.element.parentElement) {
42
+ this.element.parentElement.removeChild(this.element);
43
+ }
44
+ }
45
+ this.element = null;
46
+ }
47
+ }
48
+ addChild(child) {
49
+ this.children.push(child);
50
+ this.buildChildren();
51
+ return this;
52
+ }
53
+ setChildren(...children) {
54
+ this.empty();
55
+ this.children = children;
56
+ this.buildChildren();
57
+ return this;
58
+ }
59
+ empty() {
60
+ this.children = [];
61
+ if (this.element) {
62
+ this.element.innerHTML = "";
63
+ while (this.element.firstChild) {
64
+ this.element.removeChild(this.element.firstChild);
65
+ }
66
+ }
67
+ }
68
+ render() {
69
+ if (this.element) {
70
+ this.remove();
71
+ }
72
+ if (typeof this.build === "function") {
73
+ this.element = document.createElement(this.tagName);
74
+ this.build();
75
+ return this.element;
76
+ }
77
+ throw "The build method of this UiElement has not been defined";
78
+ }
79
+ }
80
+ exports.View = View;
81
+ exports.viewDictionary = new Map();
82
+ function registerView(viewModel, resolver) {
83
+ exports.viewDictionary.set(viewModel.prototype.constructor, resolver);
84
+ }
85
+ exports.registerView = registerView;
86
+ function getView(viewModel) {
87
+ const view = exports.viewDictionary.get(viewModel.constructor);
88
+ if (view.prototype) {
89
+ return new view(viewModel);
90
+ }
91
+ if (typeof view === "function") {
92
+ return view(viewModel);
93
+ }
94
+ throw "View resolver for '" + viewModel.constructor.name + " could not be found";
95
+ }
96
+ exports.getView = getView;
97
+ function render(viewModel) {
98
+ return getView(viewModel).render();
99
+ }
100
+ exports.render = render;
101
+ //# sourceMappingURL=View.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"View.js","sourceRoot":"","sources":["../../src/View.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { Subscribable } from "knockout";
2
+ import { CssProperty } from "./types";
3
+ import { EventListeners, IGenericEventListener, IMouseEventListener, MouseEventListeners } from "./event";
4
+ import { Attributes, AttributesSubscribable } from "./attributes";
5
+ import { Style, StyleSubscribable } from "./style";
6
+ export declare function extend(...objects: any[]): any;
7
+ export declare function isNullOrUndefined(value: any): boolean;
8
+ export interface ViewModelOptions {
9
+ attributes?: Attributes | AttributesSubscribable;
10
+ classNames?: Array<string> | Subscribable<Array<string>>;
11
+ style?: Style | StyleSubscribable;
12
+ visible?: boolean | Subscribable<boolean>;
13
+ disabled?: boolean | Subscribable<boolean>;
14
+ innerHtml?: string | Subscribable<string>;
15
+ innerText?: string | Subscribable<string>;
16
+ addViewModelToDataObject?: boolean;
17
+ userSelectable?: boolean;
18
+ dispose?: () => void;
19
+ refresh?: () => void;
20
+ eventListeners?: EventListeners;
21
+ viewType?: string;
22
+ focus?: () => void;
23
+ }
24
+ export declare class ViewModel implements ViewModelOptions {
25
+ constructor(options?: ViewModelOptions);
26
+ readonly classNames: string[] | Subscribable<Array<string>>;
27
+ readonly attributes: Attributes | AttributesSubscribable;
28
+ readonly style: Style | StyleSubscribable;
29
+ readonly visible: boolean | Subscribable<boolean>;
30
+ readonly disabled: boolean | Subscribable<boolean>;
31
+ readonly innerHtml: string | Subscribable<string>;
32
+ readonly innerText: string | Subscribable<string>;
33
+ readonly addViewModelToDataObject: boolean;
34
+ readonly userSelectable: boolean;
35
+ readonly dispose: () => void;
36
+ readonly refresh: () => void;
37
+ readonly eventListeners: EventListeners;
38
+ readonly viewType: string;
39
+ protected getStyle(...cssProperties: Array<CssProperty>): Style;
40
+ protected getStyleValue(cssProperty: CssProperty): any;
41
+ addMouseEventListener(event: keyof MouseEventListeners, mouseEventListener: IMouseEventListener): void;
42
+ addEventListener(event: keyof EventListeners, genericEventListener: IGenericEventListener): void;
43
+ setClasses(classNames: string[], replace: boolean): void;
44
+ setAttributes(attributes: Attributes): void;
45
+ setStyle(style: Style): void;
46
+ setVisible(visible: boolean): void;
47
+ setDisabled(disabled: boolean): void;
48
+ setInnerHtml(innerHtml: string): void;
49
+ setInnerText(innerText: string): void;
50
+ removeClasses(classNames: string[]): void;
51
+ focus(): void;
52
+ handleWebSocketMessage: (message: any) => void;
53
+ }
54
+ export declare function extendViewModel<TResult = ViewModelOptions, TTarget = ViewModelOptions, TSource = ViewModelOptions>(target: TTarget, source: TSource): TResult;
55
+ export declare function applyViewModelToElement(viewModel: ViewModelOptions, element: HTMLElement): void;
@@ -0,0 +1,387 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyViewModelToElement = exports.extendViewModel = exports.ViewModel = exports.isNullOrUndefined = exports.extend = void 0;
4
+ const knockout_1 = require("knockout");
5
+ const userAgent_1 = require("./userAgent");
6
+ const event_1 = require("./event");
7
+ const style_1 = require("./style");
8
+ function extend(deep, ...objects) {
9
+ var extended = {};
10
+ var withChildren = false;
11
+ let i = 0;
12
+ const length = arguments.length;
13
+ if (typeof (arguments[0]) === "boolean") {
14
+ withChildren = arguments[0];
15
+ i++;
16
+ }
17
+ const merge = obj => {
18
+ for (let prop in obj) {
19
+ if (Object.prototype.hasOwnProperty.call(obj, prop)) {
20
+ if (withChildren && Object.prototype.toString.call(obj[prop]) === "[object Object]") {
21
+ extended[prop] = extend(true, extended[prop], obj[prop]);
22
+ }
23
+ else {
24
+ extended[prop] = obj[prop];
25
+ }
26
+ }
27
+ }
28
+ };
29
+ for (; i < length; i++) {
30
+ const obj = arguments[i];
31
+ merge(obj);
32
+ }
33
+ return extended;
34
+ }
35
+ exports.extend = extend;
36
+ function isNullOrUndefined(value) {
37
+ return value === null || typeof value === "undefined";
38
+ }
39
+ exports.isNullOrUndefined = isNullOrUndefined;
40
+ class ViewModel {
41
+ constructor(options) {
42
+ this.visible = true;
43
+ this.disabled = false;
44
+ this.addViewModelToDataObject = false;
45
+ options = options || {};
46
+ this.classNames = options.classNames;
47
+ this.attributes = options.attributes || {};
48
+ this.style = options.style || {};
49
+ if (options.hasOwnProperty("visible")) {
50
+ this.visible = options.visible;
51
+ }
52
+ if (options.hasOwnProperty("disabled")) {
53
+ this.disabled = options.disabled;
54
+ }
55
+ this.innerHtml = options.innerHtml;
56
+ this.innerText = options.innerText;
57
+ this.addViewModelToDataObject = options.addViewModelToDataObject;
58
+ this.userSelectable = options.userSelectable;
59
+ this.dispose = options.dispose;
60
+ this.refresh = options.refresh;
61
+ this.eventListeners = options.eventListeners || {};
62
+ this.viewType = options.viewType;
63
+ }
64
+ getStyle(...cssProperties) {
65
+ if (cssProperties && this.style) {
66
+ const style = {};
67
+ cssProperties.forEach((cssProperty) => {
68
+ style[cssProperty] = this.style[cssProperty];
69
+ });
70
+ return style;
71
+ }
72
+ return null;
73
+ }
74
+ getStyleValue(cssProperty) {
75
+ if (this.style) {
76
+ return (0, knockout_1.unwrap)(this.style[cssProperty]);
77
+ }
78
+ return null;
79
+ }
80
+ addMouseEventListener(event, mouseEventListener) {
81
+ if (!this.eventListeners[event]) {
82
+ this.eventListeners[event] = mouseEventListener;
83
+ }
84
+ }
85
+ addEventListener(event, genericEventListener) {
86
+ if (!this.eventListeners[event]) {
87
+ this.eventListeners[event] = genericEventListener;
88
+ }
89
+ }
90
+ setClasses(classNames, replace) {
91
+ if ((0, knockout_1.isSubscribable)(this.classNames)) {
92
+ var currentClassNames = (0, knockout_1.unwrap)(this.classNames);
93
+ if (replace) {
94
+ currentClassNames = new Array();
95
+ }
96
+ if (classNames) {
97
+ classNames.forEach((className) => {
98
+ currentClassNames.push(className);
99
+ });
100
+ }
101
+ this.classNames(currentClassNames);
102
+ }
103
+ }
104
+ setAttributes(attributes) {
105
+ if (attributes) {
106
+ Object.keys(attributes).forEach((key) => {
107
+ let newValue = attributes[key];
108
+ if (newValue === null || newValue === undefined) {
109
+ newValue = null;
110
+ }
111
+ if ((0, knockout_1.isSubscribable)(this.attributes[key])) {
112
+ this.attributes[key]((0, knockout_1.unwrap)(newValue));
113
+ }
114
+ else {
115
+ this.attributes[key] = newValue;
116
+ }
117
+ });
118
+ }
119
+ }
120
+ setStyle(style) {
121
+ if (style) {
122
+ Object.keys(style).forEach((key) => {
123
+ let newValue = style[key];
124
+ if (newValue === null || newValue === undefined) {
125
+ if (userAgent_1.userAgent.browser.isInternetExplorer) {
126
+ newValue = style_1.defaultStyle[key];
127
+ }
128
+ else {
129
+ newValue = null;
130
+ }
131
+ }
132
+ if ((0, knockout_1.isSubscribable)(this.style[key])) {
133
+ this.style[key]((0, knockout_1.unwrap)(newValue));
134
+ }
135
+ else {
136
+ this.style[key] = newValue;
137
+ }
138
+ });
139
+ }
140
+ }
141
+ setVisible(visible) {
142
+ if ((0, knockout_1.isSubscribable)(this.visible)) {
143
+ this.visible(visible);
144
+ }
145
+ }
146
+ setDisabled(disabled) {
147
+ if ((0, knockout_1.isSubscribable)(this.disabled)) {
148
+ this.disabled(disabled);
149
+ }
150
+ }
151
+ setInnerHtml(innerHtml) {
152
+ if ((0, knockout_1.isSubscribable)(this.innerHtml)) {
153
+ this.innerHtml(innerHtml);
154
+ }
155
+ }
156
+ setInnerText(innerText) {
157
+ if ((0, knockout_1.isSubscribable)(this.innerText)) {
158
+ this.innerText(innerText);
159
+ }
160
+ }
161
+ removeClasses(classNames) {
162
+ if ((0, knockout_1.isSubscribable)(this.classNames)) {
163
+ const currentClassNames = (0, knockout_1.unwrap)(this.classNames);
164
+ for (let i = 0; i < currentClassNames.length; i++) {
165
+ if (classNames.includes(currentClassNames[i])) {
166
+ currentClassNames.splice(i, 1);
167
+ }
168
+ }
169
+ this.classNames(currentClassNames);
170
+ }
171
+ }
172
+ focus() {
173
+ }
174
+ }
175
+ exports.ViewModel = ViewModel;
176
+ function extendViewModel(target, source) {
177
+ return extend(true, target, source);
178
+ }
179
+ exports.extendViewModel = extendViewModel;
180
+ function applyViewModelToElement(viewModel, element) {
181
+ element.setAttribute("viewtype", viewModel.viewType || "View");
182
+ if (viewModel.classNames) {
183
+ applyClassesToElement((0, knockout_1.unwrap)(viewModel.classNames), true, element);
184
+ if ((0, knockout_1.isSubscribable)(viewModel.classNames)) {
185
+ viewModel.classNames.subscribe((classNames) => {
186
+ applyClassesToElement(classNames, true, element);
187
+ });
188
+ }
189
+ }
190
+ if (viewModel.attributes) {
191
+ Object.keys(viewModel.attributes).forEach((key) => {
192
+ var value = viewModel.attributes[key];
193
+ applyAttributeToElement(key, (0, knockout_1.unwrap)(value), element);
194
+ if ((0, knockout_1.isSubscribable)(value)) {
195
+ value.subscribe((newValue) => {
196
+ applyAttributeToElement(key, newValue, element);
197
+ });
198
+ }
199
+ });
200
+ }
201
+ if (viewModel.style) {
202
+ Object.keys(viewModel.style).forEach((key) => {
203
+ const style = viewModel.style[key];
204
+ element.style[key] = (0, knockout_1.unwrap)(style);
205
+ if ((0, knockout_1.isSubscribable)(style)) {
206
+ style.subscribe((newStyle) => {
207
+ element.style[key] = newStyle;
208
+ });
209
+ }
210
+ });
211
+ }
212
+ if (!isNullOrUndefined(viewModel.innerHtml)) {
213
+ element.innerHTML = (0, knockout_1.unwrap)(viewModel.innerHtml);
214
+ if ((0, knockout_1.isSubscribable)(viewModel.innerHtml)) {
215
+ viewModel.innerHtml.subscribe((innerHtml) => {
216
+ element.innerHTML = innerHtml;
217
+ });
218
+ }
219
+ }
220
+ if (!isNullOrUndefined(viewModel.innerText)) {
221
+ element.innerText = (0, knockout_1.unwrap)(viewModel.innerText);
222
+ if ((0, knockout_1.isSubscribable)(viewModel.innerText)) {
223
+ viewModel.innerText.subscribe((innerText) => {
224
+ element.innerText = innerText;
225
+ });
226
+ }
227
+ }
228
+ if (viewModel.userSelectable === false) {
229
+ applyEventListenerToElement("selectstart", () => { return false; }, { passive: true }, element);
230
+ element.style.userSelect = "none";
231
+ }
232
+ if (viewModel.addViewModelToDataObject) {
233
+ if (!element["data"]) {
234
+ element["data"] = {};
235
+ }
236
+ element["data"].viewModel = viewModel;
237
+ }
238
+ if (viewModel.eventListeners) {
239
+ applyEventListenersToElement(viewModel, element);
240
+ }
241
+ applyVisibilityToElement((0, knockout_1.unwrap)(viewModel.visible), element);
242
+ if ((0, knockout_1.isSubscribable)(viewModel.visible)) {
243
+ viewModel.visible.subscribe((visible) => {
244
+ applyVisibilityToElement(visible, element);
245
+ });
246
+ }
247
+ applyDisabledToElement((0, knockout_1.unwrap)(viewModel.disabled), element);
248
+ if ((0, knockout_1.isSubscribable)(viewModel.disabled)) {
249
+ viewModel.disabled.subscribe((disabled) => {
250
+ applyDisabledToElement(disabled, element);
251
+ });
252
+ }
253
+ viewModel.focus = () => {
254
+ element.focus();
255
+ };
256
+ }
257
+ exports.applyViewModelToElement = applyViewModelToElement;
258
+ function applyVisibilityToElement(visible, element) {
259
+ if (visible === false) {
260
+ element.classList.add("hidden");
261
+ }
262
+ else {
263
+ element.classList.remove("hidden");
264
+ }
265
+ }
266
+ function applyDisabledToElement(disabled, element) {
267
+ if (disabled) {
268
+ element.setAttribute("disabled", "disabled");
269
+ }
270
+ else {
271
+ element.removeAttribute("disabled");
272
+ }
273
+ }
274
+ function applyEventListenersToElement(viewModel, element) {
275
+ const clickEventListeners = new Array();
276
+ const doubleClickEventListeners = new Array();
277
+ Object.entries(viewModel.eventListeners).forEach((entry) => {
278
+ var eventName = entry[0];
279
+ var eventListener = entry[1];
280
+ if (eventName === "click") {
281
+ clickEventListeners.push(eventListener);
282
+ return;
283
+ }
284
+ if (eventName === "dblclick") {
285
+ doubleClickEventListeners.push(eventListener);
286
+ return;
287
+ }
288
+ if (eventName === "dragstart") {
289
+ element.setAttribute("draggable", "true");
290
+ }
291
+ if ((0, event_1.isGlobalEvent)(eventName)) {
292
+ applyEventListenerToElement(eventName, (event) => {
293
+ if (eventListener.options) {
294
+ const options = eventListener.options;
295
+ const keyEvent = event;
296
+ if (options.altKey && !keyEvent.altKey) {
297
+ return;
298
+ }
299
+ if (options.shiftKey && !keyEvent.shiftKey) {
300
+ return;
301
+ }
302
+ if (options.ctrlKey && !keyEvent.ctrlKey) {
303
+ return;
304
+ }
305
+ if (options.eventKey && options.eventKey !== keyEvent.key) {
306
+ return;
307
+ }
308
+ }
309
+ eventListener.listener.call(viewModel, event);
310
+ }, eventListener.options, element);
311
+ }
312
+ else if (event_1.mouseEvents[eventName] && userAgent_1.userAgent.device.supportsMouseEvents) {
313
+ applyEventListenerToElement(eventName, eventListener.listener, eventListener.options, element);
314
+ }
315
+ else if (event_1.touchEvents[eventName] && userAgent_1.userAgent.device.supportsTouchEvents) {
316
+ applyEventListenerToElement(eventName, eventListener.listener, eventListener.options, element);
317
+ }
318
+ });
319
+ clickEventListeners.forEach((clickEventListener) => {
320
+ if (userAgent_1.userAgent.device.supportsTouchEvents) {
321
+ applyEventListenerToElement("tap", clickEventListener.listener, clickEventListener.options, element);
322
+ }
323
+ if (userAgent_1.userAgent.device.supportsMouseEvents) {
324
+ applyEventListenerToElement("click", clickEventListener.listener, clickEventListener.options, element);
325
+ }
326
+ });
327
+ doubleClickEventListeners.forEach((doubleClickEventListener) => {
328
+ if (userAgent_1.userAgent.device.supportsTouchEvents) {
329
+ applyEventListenerToElement("dbltap", doubleClickEventListener.listener, doubleClickEventListener.options, element);
330
+ }
331
+ if (userAgent_1.userAgent.device.supportsMouseEvents) {
332
+ applyEventListenerToElement("dblclick", doubleClickEventListener.listener, doubleClickEventListener.options, element);
333
+ }
334
+ });
335
+ }
336
+ function applyEventListenerToElement(type, listener, options, element) {
337
+ if (!type) {
338
+ throw new Error("type is mandatory");
339
+ }
340
+ if (!listener) {
341
+ throw new Error("listener is mandatory");
342
+ }
343
+ if (!options) {
344
+ options = {};
345
+ }
346
+ if (!options.passive) {
347
+ options.passive = false;
348
+ }
349
+ if (!options.once) {
350
+ options.once = false;
351
+ }
352
+ if (element.addEventListener) {
353
+ element.addEventListener(type, (event) => {
354
+ listener(event);
355
+ }, {
356
+ passive: options.passive,
357
+ once: options.once
358
+ });
359
+ }
360
+ else if (element["attachEvent"]) {
361
+ element["attachEvent"](type, (event) => {
362
+ listener(event);
363
+ });
364
+ }
365
+ else {
366
+ throw "Your browser does not support 'addEventListener'";
367
+ }
368
+ }
369
+ function applyClassesToElement(classNames, replace, element) {
370
+ if (replace) {
371
+ element.className = "";
372
+ }
373
+ if (classNames) {
374
+ classNames.forEach((className) => {
375
+ element.classList.add(className);
376
+ });
377
+ }
378
+ }
379
+ function applyAttributeToElement(name, value, element) {
380
+ if (isNullOrUndefined(value)) {
381
+ element.removeAttribute(name);
382
+ }
383
+ else {
384
+ element.setAttribute(name, value);
385
+ }
386
+ }
387
+ //# sourceMappingURL=ViewModel.js.map