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 +2 -2
- package/dist/View.js.map +1 -1
- package/dist/ViewModel.d.ts +1 -1
- package/dist/examples/example-01.d.ts +1 -0
- package/dist/examples/example-01.js +43 -0
- package/dist/examples/example-01.js.map +1 -0
- package/dist/src/View.d.ts +32 -0
- package/dist/src/View.js +101 -0
- package/dist/src/View.js.map +1 -0
- package/dist/src/ViewModel.d.ts +55 -0
- package/dist/src/ViewModel.js +387 -0
- package/dist/src/ViewModel.js.map +1 -0
- package/dist/src/attributes.d.ts +45 -0
- package/dist/src/attributes.js +3 -0
- package/dist/src/attributes.js.map +1 -0
- package/dist/src/event.d.ts +73 -0
- package/dist/src/event.js +30 -0
- package/dist/src/event.js.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.js +22 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/observable.d.ts +12 -0
- package/dist/src/observable.js +65 -0
- package/dist/src/observable.js.map +1 -0
- package/dist/src/style.d.ts +658 -0
- package/dist/src/style.js +158 -0
- package/dist/src/style.js.map +1 -0
- package/dist/src/types.d.ts +85 -0
- package/dist/src/types.js +3 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/userAgent.d.ts +31 -0
- package/dist/src/userAgent.js +50 -0
- package/dist/src/userAgent.js.map +1 -0
- package/package.json +2 -2
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
|
|
13
|
-
|
|
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":";;;AAAA,iBAAe;AACf,uCAA2E;AAC3E,2CAAoG;AAapG,
|
|
1
|
+
{"version":3,"file":"View.js","sourceRoot":"","sources":["../src/View.ts"],"names":[],"mappings":"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"}
|
package/dist/ViewModel.d.ts
CHANGED
|
@@ -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 {};
|
package/dist/src/View.js
ADDED
|
@@ -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
|