-
-
Notifications
You must be signed in to change notification settings - Fork 147
/
index.ts
96 lines (88 loc) · 2.53 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import { DI, IContainer, IRegistry, IResolver, Key, Registration } from '@aurelia/kernel';
import { IDOM, IDOMInitializer, ISinglePageApp } from '@aurelia/runtime';
import { RuntimeHtmlConfiguration, HTMLDOM } from '@aurelia/runtime-html';
class BrowserDOMInitializer implements IDOMInitializer {
public static readonly inject: readonly Key[] = [IContainer];
private readonly container: IContainer;
public constructor(container: IContainer) {
this.container = container;
}
public static register(container: IContainer): IResolver<IDOMInitializer> {
return Registration.singleton(IDOMInitializer, this).register(container);
}
public initialize(config?: ISinglePageApp<Node>): IDOM {
if (this.container.has(IDOM, false)) {
return this.container.get(IDOM);
}
let dom: IDOM;
if (config !== undefined) {
if (config.dom !== undefined) {
dom = config.dom;
} else if (config.host.ownerDocument !== null) {
dom = new HTMLDOM(
window,
config.host.ownerDocument,
Node,
Element,
HTMLElement,
CustomEvent,
CSSStyleSheet,
ShadowRoot
);
} else {
dom = new HTMLDOM(
window,
document,
Node,
Element,
HTMLElement,
CustomEvent,
CSSStyleSheet,
ShadowRoot
);
}
} else {
dom = new HTMLDOM(
window,
document,
Node,
Element,
HTMLElement,
CustomEvent,
CSSStyleSheet,
ShadowRoot
);
}
Registration.instance(IDOM, dom).register(this.container);
return dom;
}
}
export const IDOMInitializerRegistration = BrowserDOMInitializer as IRegistry;
/**
* Default HTML-specific, browser-specific implementations for the following interfaces:
* - `IDOMInitializer`
*/
export const DefaultComponents = [
IDOMInitializerRegistration
];
/**
* A DI configuration object containing html-specific, browser-specific registrations:
* - `RuntimeHtmlConfiguration` from `@aurelia/runtime-html`
* - `DefaultComponents`
*/
export const RuntimeHtmlBrowserConfiguration = {
/**
* Apply this configuration to the provided container.
*/
register(container: IContainer): IContainer {
return RuntimeHtmlConfiguration
.register(container)
.register(...DefaultComponents);
},
/**
* Create a new container with this configuration applied to it.
*/
createContainer(): IContainer {
return this.register(DI.createContainer());
}
};