blob: 68124c0253c33bf93a4345d8d917899339a430eb (
plain)
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
|
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
const BUNDLE_SRC =
"chrome://browser/content/aboutwelcome/aboutwelcome.bundle.js";
class Onboarding {
constructor({ win } = {}) {
this.doc = win.document;
win.addEventListener("RenderWelcome", () => this._addScriptsAndRender(), {
once: true,
});
}
async _addScriptsAndRender() {
const addStylesheet = href => {
if (this.doc.head.querySelector(`link[href="${href}"]`)) {
return;
}
const link = this.doc.head.appendChild(this.doc.createElement("link"));
link.rel = "stylesheet";
link.href = href;
};
addStylesheet("chrome://browser/content/aboutwelcome/aboutwelcome.css");
const reactSrc = "resource://activity-stream/vendor/react.js";
const domSrc = "resource://activity-stream/vendor/react-dom.js";
// Add React script
const getReactReady = async () => {
return new Promise(resolve => {
let reactScript = this.doc.createElement("script");
reactScript.src = reactSrc;
this.doc.head.appendChild(reactScript);
reactScript.addEventListener("load", resolve);
});
};
// Add ReactDom script
const getDomReady = async () => {
return new Promise(resolve => {
let domScript = this.doc.createElement("script");
domScript.src = domSrc;
this.doc.head.appendChild(domScript);
domScript.addEventListener("load", resolve);
});
};
// Load React, then React Dom
if (!this.doc.querySelector(`[src="${reactSrc}"]`)) {
await getReactReady();
}
if (!this.doc.querySelector(`[src="${domSrc}"]`)) {
await getDomReady();
}
// Load the bundle to render the content as configured.
this.doc.querySelector(`[src="${BUNDLE_SRC}"]`)?.remove();
let bundleScript = this.doc.createElement("script");
bundleScript.src = BUNDLE_SRC;
this.doc.head.appendChild(bundleScript);
}
static getOnboarding() {
if (!this.onboarding) {
this.onboarding = new Onboarding({ win: window });
}
return this.onboarding;
}
}
const OnboardingContainer = Onboarding.getOnboarding();
export default OnboardingContainer;
|